问题来源:

在和一位技术老师聊天时,老师问我一个mvc 表单提交的问题,问道:怎样在表单提交的时候,将 带有 List 属性的对象传入控制器?

这时,我有点呆了,以前一直都好像是 单一属性的表单提交,没有做过 带有list属性 的表单提交。最后饶了一圈,还是老老实实回答老师,不知道,没有处理过。

既然问题出来了,并且还不会,这肯定是不可以的,回去后,开始模拟场景,测试解决问题:

1. 首先准备两个实体类

   public class Article
    {
        public string Title { get; set; }

        public string Content { get; set; }

        public List<ArticleType> Types { get; set; }
    }

   public class ArticleType
    {
        public string Name { get; set; }
        public string Dirc { get; set; }

    }

2.控制器 和 对应视图

 public class TestController : Controller
    {
        //
        // GET: /Test/
        public ActionResult Index()
        {
             ViewBag.Mes = "准备测试";return View();
        }

        [HttpPost]
        public ActionResult Index(Article ent)
        {)
               ViewBag.Mes = "Article下的Types个数为:" + ent.Types.Count;return View();
        }
    }
@model TestUI.Models.Article
@{
    ViewBag.Title = "Index";
}

<div style="padding:20px">
    @ViewBag.Mes
    <form action="index" method="post">
        <p>
            <span>标题:</span>
            @Html.TextBoxFor(x => x.Title)
        </p>
        <p>
            <span>内容:</span>
            @Html.TextAreaFor(x => x.Content)
        </p>

        @for (var i = 0; i ; i++)
        {
             <p>
                 <span>类型@(i):</span><br>
                 <span>名称:</span>
                 @Html.TextBoxFor(x => x.Types[i].Name)
                 <span>描述:</span>
                 @Html.TextBoxFor(x => x.Types[i].Dirc)
            </p>
        }

        <p>
            <button type="submit">提交</button>
        </p>
    </form>
</div>

3. 结果运行图

没提交前

提交后

结果已经很明确了,这是一种解决方案,经测试post和get提交都有效。

推断能成功的原因:

还是得归功于mvc的强类型视图的解析机制。

表单提交的本质是 表单标签的name 作为 参数名称,表单标签的value 作为 参数值。

@for (var i = 0; i < 2; i++)
{
    <p>
       <span>类型@(i):</span><br>
       <span>名称:</span>
       @Html.TextBoxFor(x => x.Types[i].Name)
       <span>描述:</span>
       @Html.TextBoxFor(x => x.Types[i].Dirc)
    </p>
 }

mvc中只有 Types 为 list 时,才能允许你这样写 x.Types[i].Name ,由于mvc语法约定在先,所以当你提交表单时,参数解析器(自己的叫法)会 把 x.Types[i] 的数据值整理添加到 List 中。

由于没有研究过mvc的底层原理,所以只能做以上推断,如有错误,还请指正。

最新文章

  1. css随笔1
  2. 高性能 Windows Socket 组件 HP-Socket v2.3.1-beta-1 发布
  3. Elasticsearch 安装中文分词
  4. C#链接阿里云OCS
  5. XAMPP(Linux版-x86兼容)官网下载
  6. [转]Mac OS X framework 解析
  7. 30 个很棒的 PHP 开源 CMS 内容管理系统
  8. eclipse运行emulator时,PANIC:Could not open emulator的解决办法
  9. Oracle 安装时候的网络相关内核参数
  10. c# winform panel 流式布局 panel块可自动排列
  11. crawler_wireshark 过滤基础知识
  12. 《java.util.concurrent 包源码阅读》07 LinkedBlockingQueue
  13. 支付宝wap支付调起客户端
  14. c# 单元测试工程如何取得当前项目路径
  15. Scala 枚举介绍及深入应用
  16. SQL Server AlwaysOn搭建
  17. AudiosessionSetActive
  18. 数据结构笔记1_求第k个最大者
  19. Django框架----Ajax
  20. vux 使用 font-awesome

热门文章

  1. ExtJs 4: How To Add Grid Cell Tooltip
  2. JQuery EasyUI之DataGrid列名和数据列分别设置不同对齐方式(转)
  3. linux —— 搭建网页项目笔记
  4. BZOJ 3262 陌上花开 CDQ分治
  5. BufferedInputStream,FileInputStream,FileChannel实现文件拷贝
  6. 手把手教学:详解HTML5移动开发框架PhoneJS
  7. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(22)-权限管理系统-模块导航制作
  8. hadoop编程技巧(4)---总体情况key按类别搜索TotalOrderPartitioner
  9. Nubia Z5S(高通公司MSM8974) QHSUSB_BULK砖的方法节省模式(随着win7在恢复recovery分区案例)
  10. Android 颜色渲染(八) SweepGradient扫描/梯度渲染