我有一個ASP.NET MVC 5應用程序,它使用了MVVM的更多MVC方法:它爲實體框架模型提供了「視圖模型」(VM)。在一個頁面上跨多個表單拆分一個視圖模型
我們的情景:
- 我們有一個VM與約7引導選項卡附帶的編輯視圖。
- 每個標籤包含自己的
@using (Html.BeginForm(...)) { ... }
。 - 當用戶切換選項卡時,我們使用AJAX保存其數據(如果它有效)。
我們面臨的挑戰:
的POST Edit(...)
行動預計常見的隱藏形式與每個AJAX調用提交。我們最終不得不重複的隱藏字段,因爲它們可以重複每個窗體:設置一些領域,一些人的價值是獨一無二的每個表單時
@Html.HiddenFor(model => model.ChildVm.Application_No)
@Html.HiddenFor(model => model.ChildVm.FormSubmitted)
// other hidden fields...
我們遇到的問題。因爲我們具有重複的ID打破HTML規則,我們必須使用一些技巧難看設置jQuery中它們的值:
// Razor helper method to fetch ASP.NET ID for control
var formSubmittedId = '@Html.ClientIdFor(m => m.ChildVm.FormSubmitted)';
// Tab change handler
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
var form = $(e.relatedTarget).attr('href');
var formId = $(e.relatedTarget).attr('href').replace('#', '');
var previousTab = $(form + '-form');
$(previousTab).find('#' + formSubmittedId).val(formId);
//....
});
上述作品,但它的醜陋。如何在同一個CSHTML上的多個表單中包含來自同一視圖模型的表單字段,而不會有重複的ID?如果我給這些字段使用不同的ID,那麼不會中斷Edit的POST操作,該操作使用客戶端的ID將它們與視圖模型服務器端各自的屬性進行匹配?
謝謝。
職位看字段不是ID ..例如'名稱<輸入的ID = '富' 名稱= 'bar' 的類型= '文本'/> '會在formdata中包含'bar'而不是'foo' – JamieD77
爲什麼你甚至需要使用ID?如果兩個不同的表單具有相同的'name =「ClientId」',並且它們實際上是相同的'ClientId',並且它不會改變嗎? '$([name = clientid])。val(newid)' –
謝謝,夥計們。忘記了表單提交NAME而不是ID。現在是後續行動:您可以在同一個頁面上使用相同字段名稱的表單嗎? – Alex