我有一个名为ExtendedProperty
的变量属性集的实体,它们有一个键和一个值。
在我的hz剃刀视图中,我有这个:
@if (properties.Count > 0)
{
<fieldset>
<legend>Extended Properties</legend>
<table>
@foreach (var prop in properties)
{
<tr>
<td>
<label for="Property-@prop.Name">@prop.Name</label>
</td>
<td>
<input type="text" name="Property-@prop.Name"
value="@prop.Value"/>
</td>
</tr>
}
</table>
</fieldset>
}
用户填写后,如何在我的控制器上访问此数据?有没有办法做到这一点,以便我可以使用模型绑定而不是手动html?
编辑=请注意我仍在使用模型,表单中还有其他内容可以使用@Html.EditFor(m => m.prop)
之类的内容。但我无法找到一种方法来集成这些变量属性。
感谢。
答案 0 :(得分:5)
您是否尝试过使用传递给控制器方法的FormCollection对象?
[HttpPost]
public ActionResult Index(FormCollection formCollection)
{
foreach (string extendedProperty in formCollection)
{
if (extendedProperty.Contains("Property-"))
{
string extendedPropertyValue = formCollection[extendedProperty];
}
}
...
}
我会尝试遍历该集合中的项目。
答案 1 :(得分:2)
假设您有以下Model
( ViewModel ,我更喜欢):
public class ExtendedProperties
{
public string Name { get; set; }
public string Value { get; set; }
}
public class MyModel
{
public ExtendedProperties[] Properties { get; set; }
public string Name { get; set; }
public int Id { get; set; }
}
您可以使用以下标记将此模型绑定到视图:
@using (Html.BeginForm("YourAction", "YourController", FormMethod.Post))
{
<input type="text" name="Name" />
<input type="number" name="Id" />
<input type="text" name="Properties[0].Name" />
<input type="text" name="Properties[0].Value" />
...
<input type="text" name="Properties[n].Name" />
<input type="text" name="Properties[n].Value" />
}
最后,你的行动:
[HttpPost]
public ActionResult YourAction(MyModel model)
{
//simply retrieve model.Properties[0]
//...
}