2012-09-26 106 views
5

的我怎麼能避免HTML屬性「數據-VAL-日期」從日期時間屬性創建元素的產生?ASP.NET MVC 4避免產生數據-VAL-日期日期時間

型號:

public class RegisterModel 
{ 
    [Required] 
    [Display(Name = "Date of birth")] 
    public DateTime? DateOfBirth { get; set; } 
} 

的觀點:

@Html.LabelFor(m => m.DateOfBirth) 
@Html.EditorFor(m => m.DateOfBirth) 

其實,我創建了三個下拉列表元素選擇出生日期,這不給值以日期格式顯示。 我見過的一些解決方案包含在解決方法中:使用javascript取消驗證。 我設想的解決方案是將DateTime屬性分爲每個值(日,月,年)的三個長時間屬性。

回答

0

數據-VAL-日期用於通過驗證系統來驗證的日期。如果刪除它,客戶端驗證將不起作用。

如果這是你想要的東西,那麼就禁用客戶端驗證。

+0

好感謝您的快速答覆。禁用客戶端驗證會影響每個元素? 在我身邊,我選擇了一個包含我的三個值並替換日期時間的新對象。 – bado

+0

@bado - 對不起,我不明白你的意思。 –

+0

我必須精確,我只是從網絡技術開始。我的意思是,如果我禁用客戶端驗證,所有data-val(表單上的所有元素)都不起作用? – bado

12

好吧,這花了我工作的一個下午......顯然mvc4決定,這是時間上的視圖模型EVERY日期時間屬性渲染數據-VAL-日期=「消息」。我試圖修改這個默認行爲,但沒有成功。

這解決了我的問題:

$.validator.addMethod('date', 
    function (value, element) { 
     return true; // since MVC4 data-val-date is put on EVERY vm date property. Default implementation does not allow for multiple cultures... 
    }); 

您也可以嘗試寫在你的共享文件夾EditorFor名爲「DateTime.cshtml」你自己編輯模板,但不要用TextBoxFor那裏,因爲那是一個也受到污染。

+0

我更喜歡這種解決方案,因爲它只能解決問題的原因。客戶端驗證提供了更好的用戶體驗,並減少了後臺服務器的數量,因此應該避免禁用整個事件。 –

+0

仍然有用+ 1ed – user2695433

0

這在Global.asax文件添加到您的應用程序啓動和形式應該火。

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;