2011-11-18 67 views
20

我在我的模型DateTime屬性,但我只是在部分時間有興趣:如何防止生成驗證屬性?

public class MyModel 
{ 
    [Required, DataType.Time] 
    public DateTime Time 
} 

在我看來,我將它輸出像這樣:

@Html.EditorFor(model => model.Time) 

這用來生成在MVC 3以下的html:

<input class="text-box single-line" data-val="true" 
    data-val-required="The Time field is required." 
    id="Time" name="Time" type="time" value="" /> 

現在,我與MVC 4嘗試這個,這是生成的HTML:

<input class="text-box single-line" data-val="true" 
    data-val-date="The field Time must be a date." 
    data-val-required="The Time field is required." 
    id="Time" name="Time" type="time" value="" /> 

添加了額外的屬性data-val-date,這會導致客戶端驗證錯誤,因爲時間(例如, 「10:30」)不是作爲日期格式。

我想這是MVC 4(I reported it)中的一個錯誤?但在解決之前,有沒有辦法阻止該屬性被生成?或者甚至更好,有沒有辦法讓它作爲data-val-time生成,所以我可以提供我自己的客戶端時間域驗證方法?

回答

2

我可以說更好的選擇將是編寫您自己的客戶端驗證功能。否則,你可以做一些欺騙,我不會說這是正確的方式,但它可以解決你的問題。關於MVC驗證,我有類似的問題,我想改變客戶端驗證的行爲。請參閱鏈接

Asp.net MVC3 validation

這裏的想法是手動添加的屬性,如「數據-VAL-要求」和「數據-VAL」您輸入的字段,然後添加驗證消息吧。

希望它能以某種方式幫助你。

編輯:

嘗試從模型

public class MyModel 
{  
    public DateTime Time 
} 

然後屬性添加到您的控制這個

刪除必填字段ATTR如下圖所示

@Html.TextBoxFor(model => model.Time, new Dictionary<string, object> { { "data-val-required", "required" }, { "data-val", "true" }}) 
    @Html.ValidationMessage("Time", "The Time field is required.") 
+0

謝謝您的回答,但是這並不能真正解決我的問題。我希望有一個特定的屬性('數據-VAL-date')到*不*插入,因爲它被插入時自動某處在MVC管道中。 – fretje

+0

@fretje嘗試在編輯部分編寫的代碼 – pramodtech

4

不理想,但它會完成這項工作;使用JavaScript在你的主模板移除驗證:

$(document).ready(function(){ 
    $("input[data-val-date]").removeAttr("data-val-date"); 
}); 
1

我已經嘗試設置輸入字段的值作爲一個javascript日期對象,這反過來又通過了不顯眼的驗證的驗證。

$("#date-input-field").val(new Date(1,0,1970)); 
$.validator.unobtrusive.parse('#form'); 
var form = $('#form'); 
form.validate(); 

這是用jQuery 1.7.2,validation.unobtrusive和mvc4完成的。

希望這會有所幫助。

3

使用[DataType(「Time」)]而不是[DataType(DataType.DateTime)]。這將使MVC不把你的變量當作DateTime,然後它不會生成「data-val-date」屬性。

本質上[數據類型(「時間」)]使您的變量爲自定義類型。但是,您不能爲自定義類型使用任何其他字符串名稱。 MVC嘗試檢測自定義類型的基礎類型。只有當您將自定義類型命名爲「時間」時,它纔會放棄檢測。

1

最好的方法是在HtmlHelper類中將ClientValidationEnabledUnobtrusiveJavaScriptEnabled設置爲false。

HtmlHelper.ClientValidationEnabled = false; 
HtmlHelper.UnobtrusiveJavaScriptEnabled = false; 
+0

我有我的配置中的那些代碼。設置它們也起作用。 –

+0

但我寧願只是在視圖中設置。 –

+1

@VitorCanova如你所願先生.. –