這裏是我所面臨的問題,不知道如何甚至接近它:我創建了模型,控制器和視圖中ASP.NET MVC 4翻譯成淘汰賽剃刀,以保持它的驗證工作
。有一次我不得不創建動態列表,所以我選擇了KnockoutJS,這個問題很容易解決。到現在爲止還挺好。 然後我意識到我使用我使用Fluent Validation在我的MVC模型上定義的驗證在淘汰賽視圖中不起作用。
我搜索過SO,發現很少有可行的解決方案:
- knockout validation
- jquery validation
- 潛在快遞淘汰賽語法剃刀
我傾向於使用後者而言,有幾個原因。主要是因爲它給我機會不是爲了介紹(學習,測試,本地化,花時間)另一個庫。
我對MVC非常熟悉,並且非常喜歡它支持本地化的方式,從而完全控制消息,標籤等。我也喜歡Fluent Validation,並且不想將其替換爲其他(更靜態,更難以本地化,靈活更符合我的心意)
我發現敲除一些例子來剃鬚刀轉換,當數據綁定有可能成爲data_bind等
我不能找到一種方式來表達與在foreach循環。
MVC查看模型
public class ContactEmail
{
public string SelectedLabel { get; set; }
public string Name { get; set; }
}
public class User
{
public IList<ContactEmail> Emails { get; set; }
}
ViewBag.EmailLabels = new string[] { "label1", "label2", ... };
淘汰賽模型
var viewModel = {
EmailLabels: ko.observableArray(@Html.Json(ViewBag.EmailLabels as string[]) || []),
Emails: ko.observableArray(@Html.Json(@Model.Emails) || []),
}
淘汰賽觀點(我想變換)
<table>
<tbody data-bind="foreach: Emails">
<tr>
<td>
@* How to make razor below work instead of knockout syntax below it? *@
@*Html.DropDownListFor(m => ????, new { data_bind="options: $root.EmailLabels, value: SelectedLabel, optionsCaption: 'Choose...'" })
<select data-bind="options: $root.EmailLabels, value: SelectedLabel, optionsCaption: 'Choose...'"></select></td>
<td>
@* How to make razor below work as well instead of knockout syntax below ?!?!? *@
@Html.TextBoxFor(m => ????, new { data_bind="value: Name, uniqueName: true" })
<input type="text" data-bind="value: Name, uniqueName: true" class="required email" />
</td>
<td>
<a href="#" data-bind="click: function() { viewModel.removeEmail(this); }">Delete</a>
</td>
</tr>
</tbody>
</table>
我看着MVC Controls toolkit什麼人的傢伙狠狠地標榜能解決我所有的驗證和本地化,一切都。我發現它是無法使用的,非常專有且非常難以理解。就像購買核彈來殺死一隻鳥。
所以,請那些有結婚MVC經驗的人加入淘汰賽,請加強並分享您的經驗。
任何幫助將不勝感激&非常感謝你提前。
而不是使用敲除來做foreach,使用剃鬚刀。您必須首先爲ContactEmail類定義EditorTemplate。我會在幾分鐘內上傳一個例子。 – amhed 2013-03-10 13:35:36
@ amhed謝謝,它是一個好主意,但是我必須使用淘汰賽來讓變長列表變得容易。希望你明白我的意思。除非你說我可以輕鬆地用剃刀做同樣的功能,敲除(可變長度列表)。感謝評論 – 2013-03-10 13:39:02
我在考慮使用foreach或EditorFor使用Emails ViewModel和定義kcnokout綁定的內部來渲染控件。 – amhed 2013-03-10 13:43:46