我的Razor视图中有一些HTML,基本上是一对Select和Input元素的3行: (可能超过3个)
<select name="SocialNetwork[1]">
<option>Skype</option>
<option>Twitter</option>
<option>Facebook</option>
</select>
<input name="SocialNetworkUsername[1]" type="text" />
<select name="SocialNetwork[2]">
<option>Skype</option>
<option>Twitter</option>
<option>Facebook</option>
</select>
<input name="SocialNetworkUsername[2]" type="text" />
<select name="SocialNetwork[3]">
<option>Skype</option>
<option>Twitter</option>
<option>Facebook</option>
</select>
<input name="SocialNetworkUsername[3]" type="text" />
当表单发布到我的控制器方法时:
public ActionResult SaveDetails(MyModel model)
{
}
如何'映射'SocialNetwork的值? SocialNetworkUsername到模型? 类似的东西:
public class MyModel
{
public string SomeProperty { get; set; }
public string SomeOtherProperty { get; set; }
public Dictionary<string,string> SocialNetworks { get; set; }
}
如果有更合适的东西,我不会'卡住'使用字典
答案 0 :(得分:0)
您可以使用编辑器模板来实现此目的。
编辑器模板将允许您在主视图中循环浏览社交网络列表,并使用@ Html.EditorFor帮助程序渲染下拉列表并轻松进行模型绑定。
首先,您的模型应该代表一个社交网络
在模型中,您需要包含下拉列表值的属性以及所选值的属性。您还需要一个属性来包含SocialNetworkUsername
public IEnumerable<SelectListItem> SocialNetworks { get; set; }
public string SelectedSocialNetwork { get; set; }
public string SocialNetworkUserName { get; set; }
使编辑器模板添加新文件夹/ Views / Shared / EditorTemplates
在EditorTemplates文件夹中,使用名称MyClass(或您的模型类名称)创建一个新视图
您需要遵循这些命名约定,因为编辑器模板无需其他配置。
在MyClass.cshtml中,您需要允许编辑单个社交网络
@model MyModel
@Html.DropDownListFor(m => m.SelectedSocialNetwork, Model.SocialNetworks)
@Html.TextBoxFor(m => m.SocialNetworkUserName)
然后在主视图中使用List of MyModel作为视图的模型,并使用for循环来渲染编辑器模板。
@model List<MyModel>
@using(Html.BeginForm())
{
for (var i = 0; i < Model.Count; i++)
{
Html.EditorFor(Model[i])
}
}
在您的控制器中,只需更改您的操作方法参数以接受MyClass列表,模型绑定应该只是神奇地工作;)