2014-10-09 77 views
0

我試圖在ASP.NET MVC中創建一個動態表單,我掙扎了一下。MVC:基於XML的動態表單

我有一個定義這樣一個形式的XML:

<?xml version="1.0" encoding="utf-16"?> 
<ContentType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Fields> 
    <ContentField> 
     <Name>Url</Name> 
     <Value>Home</Value> 
    </ContentField> 
    <ContentField> 
     <Name>Value</Name> 
     <Value>Sample value</Value> 
    </ContentField> 
    </Fields> 
</ContentType> 

現在,我已經成功使用下面的語法來創建MVC的一種形式:

@using (Html.BeginForm("Edit", "Content", FormMethod.Post)) 
{ 
    @Html.LabelFor(model => model.Name) 
    @Html.TextBoxFor(model => model.Name) 
    <br /> 
    foreach (var field in Model.Fields) 
    { 
     @Html.Label(field.Name, field.Name) 
     @Html.TextBox(field.Name, field.Value) 
     <br /><br /> 
    } 

    <input type="submit" name="Save" value="Save" /> 
} 

所以,這樣做生成所有必需的字段,但現在問題出現在控制器的POST中,我如何將動態生成的字段的值分配給我的模型的正確屬性?

親切的問候,

+0

您可能想要考慮一個自定義模型聯編程序,請參閱此帖以獲取詳細信息:http://www.codeproject.com/Articles/605595/ASP-NET-MVC-Custom-Model-Binder – Stefan 2014-10-09 13:51:22

+0

似乎就是這樣我需要。如果它能正常工作,我會盡快發佈。 – Complexity 2014-10-09 13:53:01

+0

謝謝,這是我正在尋找的東西。 – Complexity 2014-10-09 14:23:12

回答

0

如果使用索引來訪問你的模型

for (int i = 1; i <= Model.Fields.Length; i++) 
{ 
    @Html.LableFor(model => model.Fields[i].Value, model.Fields[i].Name) 
    @Html.TextBoxFor(model => model.Fields[i].Value) 
    <br /><br /> 
} 

你應該能夠使標有使用後同樣模型的方法中的數據。