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注入攻 ...
随机推荐
- Parallel.Foreach的并发问题解决方法-比如爬虫WebClient
场景五:线程局部变量 Parallel.ForEach 提供了一个线程局部变量的重载,定义如下: public static ParallelLoopResult ForEach<TSource ...
- 【题解】A-B
[问题描述]出题是一件痛苦的事情!题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!好吧,题目是这样的:给出一串数以及一个数字 C,要求计算出所有 A-B ...
- HTML5简易在线画图工具
继上次学习了HTML5的路径画圆做了动态时钟.异次元空间的反转做了运动的太阳系,这两天将画线.画圆.填充等知识点结合起来做了一个简易的在线画图工具: 查看DEMO:HTML5简易在线画图工具 功能包括 ...
- codevs 访问艺术馆
/* codevs 1163 访问艺术馆 红果果的树形dp*/ #include<iostream> #include<cstdio> #include<cstring& ...
- 偶遇问题 - - JavaScript 取消链接默认行为问题
今天在测试<JavaScript DOM编程艺术(第2版)>中第69页代码时,遇到了问题.本来预期效果应该是点击链接后不跳转当前页面,而是另外弹出有个窗口.但结果却是页面跳转了.代码如下图 ...
- 原生JS+tween.js模仿微博发布效果
转载请注明出处:http://www.cnblogs.com/zhangmingze/p/4816865.html 1.先看效果吧,有效果才有动力: 2.html结构: <!DOCTYPE ht ...
- 将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据
领导让在存储过程中批量添加数据,找出效率最高的,我看到后台代码后,发现可以将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据,知道还有其 ...
- Objective-C 实例方法可见度,方法
一 实例方法可见度,方法 1.实例变量的可见度 可见度 特点 ...
- table强制不换行
用iframe做了一个查询,里面有一个表格,结果当页面内容多的时候挤在了一起. 上图:
- LA 6856 Circle of digits 解题报告
题目链接 先用后缀数组给串排好序.dc3 O(n) 二分答案+贪心check 答案的长度len=(n+k-1)/k 如果起点为i长为len串大于当前枚举的答案,i的长度取len-1 从起点判断k个串的 ...