2011-08-05 20 views
6

Sản lượng tiêu chuẩn của @Html.HiddenFor(model => model.Id)Tại sao Html.HiddenFor tạo ra các dữ liệu thuộc tính val-

<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" /> 

Có một nhu cầu cho thế hệ của data-val-* thuộc tính? Chúng dường như khá dài và không cần thiết chỉ để có thể lưu trữ và trả lại dữ liệu cho POST tiếp theo.

Bạn nên tắt các thuộc tính này? Chúng có ích cho một số kịch bản không?

ps: Hiện nay tôi có một cách để vô hiệu hóa chúng bằng cách tạm thời thiết lập ViewContext.UnobtrusiveJavaScriptEnabled = false

sử dụng hai loại cổ phiếu này:

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

* mẫu sau mã Html.BeginForm từ FormExtensions.csMvcForm.cs

+0

nếu bạn muốn tắt xác thực, hãy xem câu trả lời này: http://stackoverflow.com/questions/4700172/unrequired-property-keeps-getting-data-val-required-attribute/4845768#4845768 – frennky

Trả lời

1

Chỉ vì trường bị ẩn, không có nghĩa là bạn không muốn xác thực. Bạn có thể đang thao tác với trường ẩn thông qua javascript và muốn giữ xác thực được tích hợp sẵn, do đó bạn không phải tự làm.

Các vấn đề liên quan