asp.net mvc 强类型视图中传入List 数据到控制器
问题来源:
在和一位技术老师聊天时,老师问我一个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的底层原理,所以只能做以上推断,如有错误,还请指正。
asp.net mvc 强类型视图中传入List 数据到控制器的更多相关文章
- 如何在FineUIMvc(ASP.NET MVC)视图中绑定多个模型?
起因 这是知识星球内的一个网友提出的,按理说ASP.NET MVC中一个视图只能绑定一个模型(Model),在视图顶部标识如下: @model IEnumerable<FineUICore.Ex ...
- asp.net mvc 在视图中获取控制器与动作的名称
获取 controller 名称: ViewContext.RouteData.Values["controller"].ToString(); 获取 action 名称: Vie ...
- ASP.NET MVC 5 - 视图
在本节中,你要去修改HelloWorldController类,使用视图模板文件,在干净利索地封装的过程中:客户端浏览器生成HTML. 您将创建一个视图模板文件,其中使用了ASP.NET MVC 3所 ...
- ASP.NET MVC Razor视图引擎攻略
--引子 看下面一段MVC 2.0的代码. <%if (Model != null){%> <p><%=Model%></p><%}%>&l ...
- 在ASP.NET MVC应用程序中实现Server.Transfer()类似的功能
在ASP.NET MVC应用程序中,如果使用Server.Transfer()方法希望将请求转发到其它路径或者Http处理程序进行处理,都会引发“为xxx执行子请求时出错”的HttpException ...
- ASP.NET MVC 3: Razor中的@:和语法
原文 ASP.NET MVC 3: Razor中的@:和语法 [原文发表地址] ASP.NET MVC 3: Razor’s @: and <text> syntax[原文发表时间] De ...
- ASP.NET MVC开发学习过程中遇到的细节问题以及注意事项
1.datagrid中JS函数传值问题: columns: { field: 'TypeName', title: '分类名称', width: 120, sortable: true, format ...
- 7.ASP.NET MVC 5.0中的Routing【路由】
大家好,这一篇向大家介绍ASP.NET MVC路由机制.[PS:上一篇-->6. ASP.NET MVC 5.0中的HTML Helpers[HTML帮助类] ] 路由是一个模式匹配系统,它确保 ...
- ASP.NET 4(和ASP.NET MVC 2)中输出HTML编码的新语法<%:%>
今天的文章介绍了ASP.NET 4中引入的一个小而且非常有用的新语法功能 - 这是在代码块中自动对输出进行HTML编码的功能.这有助于保护您的应用程序和站点免受跨站点脚本注入(XSS)和HTML注入攻 ...
随机推荐
- 一个Hibernate小程序
基本步骤 在前一篇博文Hibernate环境搭建中为大家详细的介绍如何搭建一个学习新类库的学习环境.今天,为大家带来一个Hibernate小例子,让大家能够快速上手. 步骤如下: 1.配置hibern ...
- PHP+IIS7+PHPMangerForIIS搭建开发环境
准备工作 1.安装IIS 2.安装php 3.安装phpmanager 准备工作做好后,开始搭建环境 1.在Internet信息服务管理器下找到PHPManager 2.点击Register new ...
- 【转】setAnimation和startAnimation区别
http://stackoverflow.com/questions/10909865/setanimation-vs-startanimation-in-android http://blog.cs ...
- Microsoft office word关闭英文输入首字母大写设置
1.概述: 在使用office word的时,经常出现输入一段不需首字母大写的英文时,通常敲击完回车时word会自动将首字母大写,需要重新将首字母修改成小写,这样操作很不方便.于是需要对这个功能进行一 ...
- HDU 4901(杭电多校训练#3 1005题)The Romantic Hero(DP)
题目地址:HDU 4901 这题没想到最后竟然可以做出来.. .. 这题用了两次DP,先从前往后求一次异或的.再从后往前求一次与运算的. 各自是 1:求异或的时候,定义二维数组huo[1000][10 ...
- 利用NPOI开源的读写Excel、WORD等微软OLE2组件读写execl,控制样式或单元格
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- Java和JavaScript中使用Json方法大全
林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka 摘要:JSON(JavaScript Object Notation) 是一种轻量级的数 ...
- hadoop小文件合并
1.背景 在实际项目中,输入数据往往是由许多小文件组成,这里的小文件是指小于HDFS系统Block大小的文件(默认128M), 然而每一个存储在HDFS中的文件.目录和块都映射为一个对象,存储在Nam ...
- JavaScript的变量提升
在JavaScript中,var变量具有函数级作用域,而且是整个函数作用域.为什么会是整个函数作用域呢?因为var变量具有变量(声明)提升功能,能将变量声明隐式的提升到函数体的顶部.这样做的一个好处就 ...
- 第八条——覆盖equals方法时需遵守的通用约定
1)自反性 对于任何非null的引用值x,x.equals(x)必须返回true.---这一点基本上不会有啥问题 2)对称性 对于任何非null的引用值x和y,当且仅当x.equals(y)为true ...