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注入攻 ...
随机推荐
- win7限制登录时间的设置方法
win7使用Net User命令行语句限制登录时间的方法: 1.单击“开始”,然后单击“运行”. 2.在“打开”框中,键入cmd,然后单击“确定”. 3..键入 net user username / ...
- IE的Cookie目录和临时缓存目录的关系
1.IE的Cookie位置注册表设置: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folde ...
- Dubbo xml配置 和注解配置 写法
<?xml version="1.0" encoding="UTF-8"?><!-- - Copyright 1999-2011 Alibab ...
- 新站上线啦,Html5Think,H5优秀资源的收集、学习、分享和交流
最近闲来做了个H5资源站,刚刚有点资源,可以访问交流下. 栏目: H5网站模板 H5动画特效 H5资源工具 H5学习资料 致力于H5的学习,通过各个H5优秀案例的学习,逐步完善自己的H5体系,有朝一日 ...
- android 33 对话框控件
对话框控件:最多3个按钮. mainActivity.java package com.sxt.day05_09; import android.app.Activity; import androi ...
- [转] Android LocalService与RemoteService理解
前段时间被别人问到相关的问题,没有回答对,发现自己原来理解的有偏差,最近看了下,写了个小Demo实验了下,现在将其记录下来,以后千万别犯同样的错误就好了. 一.LocalService(本地服务) 不 ...
- viewpager+fragment学习笔记
有暇,总结一下viewpager+fragment的使用. 先来看看效果图: 有三个标题,三个fragment,滑动时标题的颜色会随着变化. MainActivity.java public clas ...
- 移动前端之 zepto
移动前端之 zepto http://qtown.corp.qunar.com/media/video/detail?id=1084&type=1&title=%E5%86%AF%E5 ...
- iOS 数据持久化(2):SQLite3
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css); @import url(/ ...
- HDFS的Java客户端操作代码(查看HDFS下所有的文件或目录)
1.查看HDFS下所有的文件或目录 package Hdfs; import java.io.IOException; import java.net.URI; import org.apache.h ...