Почему Html.HiddenFor генерирует атрибуты data-val-

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


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

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

ps: В настоящее время у меня есть способ отключить их, временно установив 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

7
задан tereško 12 April 2013 в 21:14
поделиться