Почему Html.HiddenFor генерирует атрибуты data-val- - PullRequest
6 голосов
/ 05 августа 2011

Стандартный вывод @Html.HiddenFor(model => model.Id) равен

<input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." id="Id" name="Id" type="hidden" value="0" />

Есть ли необходимость в генерации атрибутов data-val-*? Они кажутся довольно многословными и не нужны, чтобы иметь возможность хранить и возвращать данные для следующего POST.

Это хорошая идея, чтобы отключить эти атрибуты? Они полезны для некоторых сценариев?

пс: В настоящее время у меня есть способ отключить их, временно установив ViewContext.UnobtrusiveJavaScriptEnabled = false

используя эти два класса:

public static class Extensions
{
    public static NoUnobtrusiveJavaScript NoUnobtrusiveJavaScript(this HtmlHelper htmlHelper)
    {
        return new NoUnobtrusiveJavaScript(htmlHelper.ViewContext);
    }
}

public class NoUnobtrusiveJavaScript: IDisposable
{

    private bool _disposed;
    private readonly bool _unobtrusiveJavaScript;
    private readonly ViewContext _viewContext;

    public NoUnobtrusiveJavaScript(ViewContext viewContext)
    {
        if (viewContext == null) {
            throw new ArgumentNullException("viewContext");
        }

        _viewContext = viewContext;
        _unobtrusiveJavaScript = viewContext.UnobtrusiveJavaScriptEnabled;
        _viewContext.UnobtrusiveJavaScriptEnabled = false;
    }

    public void Dispose()
    {
        Dispose(true /* disposing */);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (!_disposed)
        {
            _disposed = true;
            // restore the original UnobtrusiveJavaScriptEnabled state
            if (_viewContext != null)
            {
                _viewContext.UnobtrusiveJavaScriptEnabled = _unobtrusiveJavaScript;
            }
        }
    }

    public void EndForm()
    {
        Dispose(true);
    }
}
Шаблон

*, следующий за кодом Html.BeginForm из FormExtensions.cs и MvcForm.cs

1 Ответ

1 голос
/ 16 февраля 2012

То, что поле скрыто, не обязательно означает, что вам не нужна проверка. Возможно, вы управляете скрытым полем с помощью javascript и хотите сохранить встроенную проверку, чтобы вам не пришлось выполнять свою собственную.

...