我在我的數據庫中有一個名爲Sections和Fields的表。部分包含字段。字段可以是文本框或複選框。我正在使用它來動態創建用於數據錄入的HTML表單。MVC4 - 如何使用EditorFor()和來自數據庫的動態表單數據
我有一個綁定到第一個觀點:
@model Data.Section
@using (Html.BeginForm("SaveSection", "MyController"))
{
@Html.ValidationSummary(true)
<div class="fields">
@Html.EditorFor(m => m.Fields)
</div>
<input type="submit" value="Save">
}
我那麼有現場編輯模板在我的EditorTemplates文件夾:
@model Photon.Data.Field
@if (Model != null)
{
<span class="label">@Html.DisplayFor(m => m.Name)</span>
<span class="field">
@Html.EditorFor(m => m.FieldValues)
</span>
}
(我有FieldValues編輯模板但這並不相關,我不認爲)。
上面的解決方案對於列出文本框和複選框非常適用。當用戶編輯它們,然後點擊保存,回發到我的控制器方法:
[HttpPost]
public ActionResult SaveSection(Section model)
{
// do some magic
}
傳遞到我的方法我科模型是有效的,並綁定到網頁中的字段。
這裏就是我難倒: 在一些部分,該領域將需要在一個特定的HTML格式來佈局(如水平或看起來像從文檔的形式) - 基本上,他們可以不會被列出。所以我的想法是分配一個部分模板名稱,然後加載該模板的所有領域,如:
<div class="fields">
@if (Model.IsTemplated)
{
@Html.EditorFor(m => m.Fields, Model.TemplateName)
}
else
{
@Html.EditorFor(m => m.Fields)
}
</div>
將我的Model.TemplateName看法是什麼樣的,如果我想打好所有這些領域出在一個特定的HTML格式,不只是一個列表?
下面是我在哪裏:
@model IEnumerable<Data.Field>
<table border="1">
<tr>
<td>
How do I display one field here with EditorFor?
</td>
<td>
How do I display another field here with EditorFor?
</td>
<td>
How do I display and another field here with EditorFor?
</td>
</tr>
</table>
想法?我在這裏走正確的道路嗎?
呀看,這是個問題就在那裏......當這從視圖中調用:@ Html.EditorFor(m => m.Fields,Model.TemplateName)它調用EditorTemplate 3次(3個字段)。因此,您提供的解決方案將連續顯示它們,但是,它會顯示每個字段3次,所以我最終會顯示9個表單字段而不是3個。
另外,如果我想要一個非常特定的佈局,請說字段都表示一個地址,所以頂部的兩個字段,底部的三個字段。而如果這些模板變得非常複雜呢? –
什麼?你實際上有三張桌子,每張桌子上有三列?這聽起來很奇怪。我自己對這個MVC很陌生,但我已經成功地使用了[部分視圖](http://msdn.microsoft.com/zh-cn/library/dd492962(v = vs108) ).aspx)在類似的情況。你可以嘗試用** @ Html.RenderPartial(Model.TemplateName,Model.Fields)替換** @ Html.EditorFor(m => m.Fields,Model.TemplateName)** ** – Sphinxxx
我不認爲你應該在beginform()塊中使用局部視圖 –