我有安裝Knockoutjs動態創建使用下面的代碼值的可編輯列表:如何獲取ModelState.AddModel錯誤以綁定到動態創建的驗證跨度?
var requirementModel = function() {
var self = this;
self.requirementtypes = ko.observableArray(@Html.Interpret(Model.requirementtypes));
self.requirementid = ko.observable(@Html.Interpret(Model.requirementid));
self.AddRequirementType = function() {
self.requirementtypes.push({
requirementtypeid: null,
number: "",
requirementid: 0
});
};
self.RemoveType = function(Type) {
self.requirementtypes.remove(Type);
};
self.hookUpValidation = function() {
$.validator.unobtrusive.parseDynamicContent('.dynamicData');
};
};
var viewModel = new requirementModel();
ko.applyBindings(viewModel);
的HTML:
<div class="small-box dynamicData" data-bind="template:{ name: 'requirementType-template', foreach: requirementtypes, afterRender:$root.hookUpValidation }" ></div>
<button data-bind='click: AddType'>Add Type</button>
我已經迷上了使用代碼動態數據驗證推薦上stackoverflow 。我可以做更復雜的驗證,如果失敗了,我可以使用ModelState.AddModelError(「輸入字段名稱」,「我可憐的傻瓜」這打破了這個「);這對非動態字段強類型或@ Html.ValidationMessage(「輸入字段名稱」)完美工作
但是,我找不到一種方法鉤住服務器端模型錯誤動態內容。
我有span標籤,與客戶端一起工作,他們完美的工作。但是,在服務器端驗證失敗並返回頁面之後,它們並未陷入返回的數據中。任何想法如何實現這一目標?
謝謝
首選的方法是構建一個自定義ModelBinder,以將傳入的值綁定到您的模型並讓默認驗證機制引入。你的意思是你的模型是在客戶端生成的,而你沒有在服務器上定義它? – Aliostad 2012-02-03 12:23:16
模型在服務器端定義。頁面的一部分使用knockoutjs將項目添加到列表中。我通過郵寄將所有內容都完美地恢復。動態數據全部發布。問題是如果我引發錯誤服務器端(例如複雜的驗證),然後返回到視圖,動態創建的項目引發的任何錯誤都沒有綁定。 – GraemeMiller 2012-02-03 12:25:58
我在想我可能要訪問模型狀態,並將適當的錯誤添加到Knockout模型中,然後使用它。只是想知道是否有一個更優雅的方式(如我如何得到客戶端驗證) – GraemeMiller 2012-02-03 12:29:03