2012-12-19 43 views
2

我在我的數據庫中有一個名爲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> 

想法?我在這裏走正確的道路嗎?

回答

0

我不知道我是否正確理解你的問題,但是如果你設法到達最終的視圖,那麼在表格中放置字段應該類似於這個?

... 
<tr> 
    @foreach(var fld in Model) 
    { 
     <td> 
      @Html.EditorFor(m => fld) 
     </td> 
    } 
</tr> 
... 

(我沒有在Visual Studio用剃刀設計師的坐前面,現在,所以我對任何錯字道歉..)

+0

呀看,這是個問題就在那裏......當這從視圖中調用:@ Html.EditorFor(m => m.Fields,Model.TemplateName)它調用EditorTemplate 3次(3個字段)。因此,您提供的解決方案將連續顯示它們,但是,它會顯示每個字段3次,所以我最終會顯示9個表單字段而不是3個。
另外,如果我想要一個非常特定的佈局,請說字段都表示一個地址,所以頂部的兩個字段,底部的三個字段。而如果這些模板變得非常複雜呢? –

+0

什麼?你實際上有三張桌子,每張桌子上有三列?這聽起來很奇怪。我自己對這個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

+0

我不認爲你應該在beginform()塊中使用局部視圖 –

相關問題