在控制器中,我希望能夠獲得模型的客戶端驗證規則。我使用數據註釋附加了一些屬性,並希望能夠通過ajax調用將某些內容傳遞迴客戶端,以便我可以自動構建jquery驗證選項。Knockout + mvc 3 +驗證
正常情況下,這是免費的與不顯眼的東西,但我試圖利用淘汰賽的綁定,而不必複製服務器和客戶端上的驗證規則。
沒有在模型服務器端使用反射,我有點不確定如何實現這一點。
在控制器中,我希望能夠獲得模型的客戶端驗證規則。我使用數據註釋附加了一些屬性,並希望能夠通過ajax調用將某些內容傳遞迴客戶端,以便我可以自動構建jquery驗證選項。Knockout + mvc 3 +驗證
正常情況下,這是免費的與不顯眼的東西,但我試圖利用淘汰賽的綁定,而不必複製服務器和客戶端上的驗證規則。
沒有在模型服務器端使用反射,我有點不確定如何實現這一點。
這是一項相當艱鉅的任務。你希望能夠通過相應的數據類型轉換等將C#代碼轉換爲Javascript。你最好在服務器端和客戶端寫兩個單獨的驗證集合。與自己編寫自己的轉換框架並維護自己的轉換框架相比,維護它要容易得多
我不認爲這很容易:-s – RubbleFord 2011-04-22 05:32:36
可能有一小組標準驗證可以即時生成JS的類型(例如required,regex等);只有自定義的驗證器,你必須在客戶端和服務器上實現。 – namuol 2011-05-13 13:09:42
在我的Mvc Controls Toolkit中,我開發了基於knockout庫的Helpers。這些助手不僅可以幫助編寫淘汰賽代碼,還可以通過Unobtrusive驗證和全球化來增強淘汰賽庫。此外,綁定機制得到了增強,以包含諸如DatetimePicker等複雜控件以及其他「複雜」(由不同html部件製作)控件。
最後,敲除模板可以通過Razor助手定義。
請參閱文檔here,here,here和here。我也有一些教程,說明如何實現我的助手高級功能:
Low BandWidth Transfers with The Client Side Templates of the Mvc Controls Toolkit
這很好,但我使用FluentValidation進行驗證,它更新了ModelState對象。當呈現視圖時,由FluentValidation框架生成的來自ModelState的錯誤將適當地應用於每個輸入。 MVC控件工具包是否查看模型狀態來確定哪些輸入需要突出顯示? – Dmitry 2012-10-11 20:05:17
服務器端錯誤取自模型狀態,因此它們可以與使用模型狀態的任何技術一起使用......並且如果您將錯誤手動添加到模型狀態。 – 2012-10-12 15:07:38
我會討厭三重驗證。驗證域模型,驗證視圖模型,現在是另一個庫......它的重複類型。應** **驗證,而不是3. – 2013-03-08 19:44:30
在模型中使用的屬性驗證,你喜歡:
public class ModelWithValidation
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
}
以mvc形式
@using(Html.BeginForm())
{
@Html.TextBoxFor(m => m.Name, new {data_bind = "value: name"})
@Html.ValidationMessageFor(m => m.Name)
}
在jQuery測試中,如果表單是有效的onSubmit或在knockout保存函數中調用下一個代碼來驗證輸入。您必須包含jQuery.unobtrusive *和jQuery.validate *庫。不要忘記在服務器端驗證輸入!
var form = $("form");
form.removeData('validator');
form.removeData('unobtrusiveValidation');
$.validator.unobtrusive.parse(form);
$("form").valid() //true false
根據您確切需要做的事情,Breeze js可能是最佳解決方案。特別是,如果您使用EF,則可以在客戶端複製服務器EF DbContext
的大部分功能,當然還包括驗證,還包括更改跟蹤.saveChanges
,這是一種類似於LINQ查詢的簡單語法,緩存,序列化和反序列化以允許離線工作以及其他許多事情。
的基本步驟與微風JS工作是:
當然,並不是所有的服務器上的功能將在客戶端上覆制的,但你可以做很多事情:
saveChanges
,這將使得後臺更新,當然.saveChanges
最後額外的服務器驗證,可以擴展和修改服務器代碼,包括一些業務邏輯,這樣就可以做比單純的EF模型暴露給客戶更多。
您是否找到了可接受的解決方案?如果是這樣,請在這裏回答你自己的問題。 – 2011-09-29 21:26:25
目前還沒有,轉移到另一個項目,但將返回。 – RubbleFord 2011-09-30 07:56:03
請參閱:http://stackoverflow.com/questions/9878639/upshot-mvc-4-handling-of-date-knockout-bindings/9890429#9890429 – 2012-04-16 11:28:51