aln668 Ответов: 0

Использование validationhelper в MVC razor


Я пытаюсь создать страницу, где пользователи вводят некоторые числовые поля, которые затем обрабатываются внешней библиотекой dll на сервере. Расчет требует проверки на стороне клиента, например на интервалах (расчет занимает много времени, потому что он очень сложный). Эти интервалы сохраняются в базе данных и могут изменяться с течением времени, например, путем расширения некоторого допустимого диапазона. Кроме того, эти поля должны быть предварительно загружены значениями по умолчанию, и некоторые из них не должны быть видны некоторым пользователям, в зависимости от роли.
Учитывая изменчивость интервалов, я исключил использование атрибута Range в модели (потому что Range должен быть переменным по времени, без необходимости перекомпиляции), поэтому я создал пользовательский помощник, который загружает все необходимые данные из базы данных . Проблема в том, что я не могу использовать ValidationHelper, как указано в этих статьях!

https://docs.microsoft.com/en-us/aspnet/web-pages/overview/ui-layouts-and-themes/validating-user-input-in-aspnet-web-pages-sites
https://www.mikesdotnetting.com/article/191/validation-in-razor-web-pages-2

Что я уже пробовал:

если я использую
Validation.Add("field1", Validator.Range((double)min, (double)max, "some error"));
Я получаю
Цитата:
Ошибка (CS0117) - проверка не содержит определения для 'RequireField'


если я использую
ValidationHelper.Add("field1", Validator.Range((double)min, (double)max, "some error"));
Я получаю
Цитата:
Ошибка (CS0120): ссылка на объект требуется для метода ' ValidationHelper. Add(string, params IValidator [])'


если я попытаюсь
ValidationHelper v = new ValidationHelper();
Я получаю
Цитата:
Ошибка CS1729: 'ValidationHelper' не содержит конструктора, принимающего 0 аргументов

Я пытался что-то в него вставить, но IntelliSense мне не помогает, и на сайте MSDN я не могу найти, как его инициализироватьКласс ValidationHelper (System. Web.WebPages)

min и max правильно загружаются из базы данных (они плавают)
Все остальное, кроме проверки, работает очень хорошо (значение по умолчанию, скрытые поля для неопытных пользователей и так далее)

поле есть
@html.TextBox("field1", default_value, new { @class = fieldclass })
или
@html.Hidden("field1", default_value);

чтобы он работал, первые строки моего пользовательского помощника таковы
@using System;
@using System.Collections.Generic;
@using System.Linq;
@using System.Web.WebPages;
@using System.Web;
@using System.Web.Mvc;
@using System.Web.Mvc.Html;
@using System.Web.Mvc.Routing;
@using System.Web.Mvc.Razor;
@using System.Data.Entity;
@using mywebsite.Controllers;
@using mywebsite.Models;

@functions {
    private static WebViewPage page
    {
        get { return PageContext.Page as WebViewPage; }

    }
    private static System.Web.Mvc.HtmlHelper<dynamic> html
    {
        get { return page.Html; }
    }
    private static UrlHelper url
    {
        get { return page.Url; }
    }
    private static dynamic viewbag
    {
        get { return page.ViewBag; }
    }
}


После решения этой большой проблемы я создам модель для лучшего управления всеми данными: я поставлю что-то как
m => m.field1


Я использую Visual Studio 2015, это мои пакеты:
<packages>
  <package id="Antlr" version="3.5.0.2" targetFramework="net46" />
  <package id="bootstrap" version="3.3.7" targetFramework="net46" />
  <package id="EntityFramework" version="6.1.3" targetFramework="net46" />
  <package id="EntityFramework.it" version="6.1.3" targetFramework="net46" />
  <package id="jQuery" version="3.1.1" targetFramework="net46" />
  <package id="jQuery.Validation" version="1.16.0" targetFramework="net46" />
  <package id="Microsoft.AspNet.Identity.Core" version="2.2.1" targetFramework="net46" />
  <package id="Microsoft.AspNet.Identity.EntityFramework" version="2.2.1" targetFramework="net46" />
  <package id="Microsoft.AspNet.Identity.Owin" version="2.2.1" targetFramework="net46" />
  <package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.Razor.it" version="3.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebPages.it" version="3.2.3" targetFramework="net46" />
  <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.3" targetFramework="net46" />
  <package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" targetFramework="net46" />
  <package id="Microsoft.Net.Compilers" version="1.3.2" targetFramework="net46" developmentDependency="true" />
  <package id="Microsoft.Owin" version="3.0.1" targetFramework="net46" />
  <package id="Microsoft.Owin.Host.SystemWeb" version="3.0.1" targetFramework="net46" />
  <package id="Microsoft.Owin.Security" version="3.0.1" targetFramework="net46" />
  <package id="Microsoft.Owin.Security.Cookies" version="3.0.1" targetFramework="net46" />
  <package id="Microsoft.Owin.Security.Facebook" version="3.0.1" targetFramework="net46" />
  <package id="Microsoft.Owin.Security.Google" version="3.0.1" targetFramework="net46" />
  <package id="Microsoft.Owin.Security.MicrosoftAccount" version="3.0.1" targetFramework="net46" />
  <package id="Microsoft.Owin.Security.OAuth" version="3.0.1" targetFramework="net46" />
  <package id="Microsoft.Owin.Security.Twitter" version="3.0.1" targetFramework="net46" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net46" />
  <package id="Modernizr" version="2.8.3" targetFramework="net46" />
  <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net46" />
  <package id="Owin" version="1.0" targetFramework="net46" />
  <package id="Respond" version="1.4.2" targetFramework="net46" />
  <package id="WebGrease" version="1.6.0" targetFramework="net46" />
</packages>

и они находятся в моем web. config (я изменил их, чтобы они были как минимум версии 2.0.0.0)
Цитата:
& lt;зависимая сборка>
&ЛТ;assemblyIdentity наименование="системы.Веб.Помощники текста" PublicKeyToken="***" /&ГТ;
&ЛТ;перенаправления привязки старую версию="2.0.0.0-3.0.0.0" новаяверсия="3.0.0.0" /&ГТ;

& lt;зависимая сборка>
&ЛТ;assemblyIdentity наименование="системы.Веб.В MVC текста" PublicKeyToken="***" /&ГТ;
&ЛТ;перенаправления привязки старую версию="2.0.0.0-5.2.3.0" новаяверсия="5.2.3.0" /&ГТ;

& lt;зависимая сборка>
&ЛТ;assemblyIdentity наименование="системы.Веб.Страницы текста" PublicKeyToken="***" /&ГТ;
&ЛТ;перенаправления привязки старую версию="2.0.0.0-3.0.0.0" новаяверсия="3.0.0.0" /&ГТ;

0 Ответов