繁体   English   中英

asp.net mvc如何将集合传递给控制器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM