7

の標準出力@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のためにデータを保存して返すことができるようにするためだけに必要ではありません。

これらの属性を無効にするのは良い考えですか?それらはいくつかのシナリオに役立ちますか?

ps:現在、一時的に設定して無効にする方法がありますViewContext.UnobtrusiveJavaScriptEnabled = false

これらの2つのクラスを使用します。

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);
    }
}

* FormExtensions.csおよびMvcForm.csのHtml.BeginFormコードに続くパターン

4

1 に答える 1

1

フィールドが非表示になっているからといって、必ずしも検証が不要であることを意味するわけではありません。JavaScriptを介して非表示フィールドを操作している可能性があり、組み込みの検証を保持して、独自の検証を行う必要がないようにする必要があります。

于 2012-02-15T20:19:20.337 に答える