[英]asp.net mvc how can I pass the collection to the controller
问题相当有趣:当我有创建模板的strondly类型视图时,如何将集合传递给控制器。 这是我的ViewModel:
public class AgencyOfficiesItem
{
public string Address { get; set; }
public List<PhoneItem> Phones { get; set; }
public List<SelectListItem> CitiesList { get; set; }
}
public class PhoneItem {
public string Phone { get; set; }
public string PhoneOperator { get; set; }
}
因此,我想创建一个用于创建电话对象的视图,该视图具有电话运营商和电话号码字段。 但是,有趣的是我希望从手机对象中获取一个集合并将它们传递给控制器。 有任何想法吗?
如果您继续在您的视图中执行此类操作:
@using(Html.BeginForm... // I'm doing this from memory, check the arguments
{
for( int idx = 0; idx < Model.Phones.Count; idx++ )
{
@Html.EditorFor(m => m.Model.Phones[idx].Phone)
@Html.EditorFor(m => m.Model.Phones[idx].PhoneOperator)
}
// similar for cities, other model properties, etc.
}
并声明你的post方法如下
[HttpPost]
public ActionResult OnPostBack( <modeltype> arg )
{
if( ModelState.IsValid )
{
// action logic, etc.
那一切都应该好。 MVC将以一种方式定义生成的文本框,以便能够在回发时将它们与模型链接起来。 我相信它所做的是在文本框中声明name属性,例如,Phones_1_Phone。 您可以在浏览器中查看生成的HTML进行检查。
顺便说一下,还有其他方法可以让它发挥作用。 我相信,您可以使用键,使用Dictionary <>而不是List <>,以及稀疏数组。 当然,除了在页面上生成一堆文本框之外,你还需要做更多的事情 - 有些标签会很好:)。
我发现一个很棒的教程就是来自Apress的Steven Sanderson的Pro ASP.NET MVC 2框架。 几个月前我开始对MVC一无所知,现在我对它很满意(虽然还不是专家)。
哎呀,忘了提一些重要的东西:我的例子使用了MVC3及其Razor视图引擎。 如果您不使用MVC3,则需要将其转换为MVC2语法。 但你应该给MVC3看一下,我发现它比它的前辈更直观。 更不用说“罗嗦”了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.