我有一個叫做CategoryModel
的類,其中一個屬性是同一類型的對象列表。所以CategoryModel.Categories
是List<CategoryModel>
類型。MVC EditorFor一個頁面上的多個編輯表單的模型綁定
在類別索引頁面上,我顯示了每個類別的編輯器,以便用戶可以更改任何類別名稱,而無需轉到專用頁面來執行此操作。像這樣:
<ul id="categories>
@Html.EditorFor(model => model.Categories)
</ul>
而對於CategoryModel
編輯模板看起來是這樣的:
<li class="folder">
@using (Html.BeginForm("Edit", "Category", new { id = Model.Key }, FormMethod.Post, new { @class = "ajaxoff"})) {
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.Key)
@Html.HiddenFor(model => model.ParentKey)
@Html.HiddenFor(model => model.Sequence)
@Html.HiddenFor(model => model.IncludeDeleted)
@Html.TextBoxFor(model => model.Name, null, new { @class = "catName" })
@Html.ValidationMessageFor(model => model.Name)
<input type="submit" value="Save" class="icon save" />
}
</li>
我是提交表單無法正確綁定到CategoryController
的Edit
行動的問題:
[HttpPost]
public ActionResult Edit(CategoryModel category)
{
// At this point all properties in category are null
}
如果我檢查隱藏字段和文本框的名稱,它們會根據它們在當前類別中的位置進行標記ory(例如Categories[0].Name
)。但是,如果我創建專用編輯視圖,則只需根據字段名稱命名(例如Name
)。
我試圖改變控制器接受分類的列表:
[HttpPost]
public ActionResult Edit(List<CategoryModel> categories)
{
var category = categories.First();
}
這個作品,如果我提出的第一個類別,但沒有其他人(在這些案件Categories
爲空)。
我也試圖改變我如何顯示我EditorFor,這樣做:
<ul id="categories>
@foreach (var cat in Model.Categories)
{
@Html.EditorFor(model => cat);
}
</ul>
從而改變字段名稱每個類別(例如,所有類別名稱叫cat.Name
)一樣,這是我相信是朝着正確方向邁出的一步。
那麼如何正確地綁定到我的控制器?我意識到我可以提交整個父類別,然後保存每個子類別,但這似乎是提交單個更改的非常低效的方式。
我這樣做了,但在字段名後面仍然有[0]和[1],你是怎麼處理的? – Dennis
我沒有得到你描述的問題。如果您使用@ Html.EditorFor(model => model.Categories,null,「」)而不是上面的循環,則會在字段名稱之前獲得[0]和[1],但是,因爲您要將數組傳遞給EditorFor方法而不是單個模型。 – Maloric