我正在使用javascript unobtrusive驗證。我有一個視圖模型,我重用了幾種形式,在一些形式中,視圖模型中的一些屬性是必需的。在其他形式上,他們不應該這樣做。有沒有辦法以編程方式設置[必需]屬性,以便我可以做到這一點?ASP.NET MVC 3:以編程方式添加DataAnnotation(RequiredAttribute)以查看模型
謝謝!
我正在使用javascript unobtrusive驗證。我有一個視圖模型,我重用了幾種形式,在一些形式中,視圖模型中的一些屬性是必需的。在其他形式上,他們不應該這樣做。有沒有辦法以編程方式設置[必需]屬性,以便我可以做到這一點?ASP.NET MVC 3:以編程方式添加DataAnnotation(RequiredAttribute)以查看模型
謝謝!
不能使用DataAnnotations,因爲這些都是在編譯時實現的,不能動態地添加完成。您可以
創建具有合適的註釋
或
有您的視圖模型發送給服務並根據檢查行動的模型是不同的視圖模型,它是由與收益未來你可以附加到你的模型狀態驗證錯誤的列表
或
把一個屬性上的視圖模型,如string IsBeingUsedFor
和使用,在結合有RequiredIf大taAnnotation。 Here is an example of a library already build that uses conditional DataAnnotations。然後,你可以說,[RequireIf(「IsBeingUsedFor」,「Action_A」)
這些不一定所有的選項,但一些清潔劑的人的。你可以用JavaScript來完成這一切,但如果一個'壞人'提交表單並繞過客戶端驗證,你將失去服務器端驗證,並可能在應用程序中打開一些漏洞。
我不知道有什麼辦法來做到這一點與數據註釋。但是,在您的視圖中,您可以在javascript中添加/刪除所需的規則。
$("#myProperty").rules("add", { required: true });
或
$("#myProperty").rules("remove", "required");
這是很好的瞭解,謝謝!我可能會使用RequiredIf,但會牢記這一點。 – 2012-04-08 01:01:22
Attributes在運行時通過反射進行訪問,所以我不知道你可以在需要時關閉和打開。我的建議是創建一個「必需的」ViewModel和一個「NotRequired」視圖模型。我知道這可能是你想要的,但這是我能想到的最簡單的方法。
如果客戶端驗證足夠你,那麼你可以做你的Razor視圖下,例如:
@Html.LabelFor(model => model.title, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@if (Model.IsTitleRequired == true)
{
@Html.TextBoxFor(model => model.title, new { @required = true })
}
else
{
@Html.TextBoxFor(model => model.title)
}
@Html.ValidationMessageFor(model => model.title)
</div>
優秀信息!從再看看我需要的東西,我想我可以製作一個從我的基本視圖模型繼承的視圖模型,並避開它。如果沒有,我會嘗試RequiredIf。 – 2012-04-08 01:02:13