MVC传值汇总
方法一:
Url传参是通过Get的方式,一般我们都是通过一定规则的Url来传参。比如下面的URL。
http://localhost/contorller/action/?Params1=a&Params2=b
public ActionResult Index(ExpModel model, string Params1 , string Params2)
{
ViewBag.P1 = Params1 ;
ViewBag.P2= Params2;
return View();
}
方法二:
修改MVC3中的路由规则
在Global.asax.cs中,修改路由规则
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional} // 参数默认值
);
MapRoute方法在RouteCollectionExtensions里有6个重载版本,有兴趣的可以研究这里里面的方法,这里我抽其中的一个进行
public static Route MapRoute(
this RouteCollection routes,
string name,
string url,
Object defaults,
Object constraints,
string[] namespaces )
name:路由在路由列表里的唯一名字(两次MapRoute时name不能重复)
url:路由匹配的url格式
defaults:路由url {占位符} 的默认值
constraints:url的 {占位符} 的约束
namespaces:这个是用于设置路由搜索的控制器命名空间
比如,我们可以修改为下面的规则
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{uid}_{token}_{others}.html", // 带有参数的 URL
new { controller = "Home", action = "Index", uid = UrlParameter.Optional, token = UrlParameter.Optional,others = UrlParameter.Optional} // 参数默认值
);
如果访问的URL地址如:http://localhost/home/index/123_tokenvalue_othersvalue.html 时
controller="Home", action="Index", uid=123, token=tokenvalue, others=othersvalue
获取和上面的方法一样。
OK,以上是抄别人的,来源我也忘了,百度吧,以下来点猛的
上面的方式无非是URL的问题,而本质我们可以区分为GET/POST,但看这两种先,用的做多的
区分Get和Post
1、Get方法是用来向服务器上获取数据,而Post是用来向服务器上传递修改数据。
2、Get将表单里的数据添加到action所指向的URL后面,并且两者之间使用”?”连接,而各个变量之间使用”&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值对象的方式,传递到所指向的action.
3、Get是不安全的,因为在传输过程中,数据被放在请求的Url中,这样,用户可以直接在浏览器上看到提交的数据,一些系统内部信息也一同显示在用户面前。Post的所有操作对用户来说都是不可见的。
4、Get传输的数据量小,主要是受限与于Url长度限制,其中IE浏览器对URL的最大限度为2083个字符。而post可以的传输大量的数据,所以在上传文件和大数据量时使用post。
5、Form提交默认为Get方法提交(好吧,WebForm时代绝对是POST,MVC反转了)。
6、Get方式获取数据后,刷新不会有负面的影响,因为它只是获取数据,而Post方法刷洗页面重复提交可能会产生不良的后果。
具体使用如下代码:
Home/Index.cshtml:
<form action="/Home/Search" method="get">
<input type="text" name="query"/>
<br />
<input type="submit" value="Seach"/>
</form>
Home/Search方法:
public ActionResult Search(string query)
Home/ Search.cshtml页面用于展示查询到的信息,代码略。
运行效果图如下:
(这个是效果图)http://localhost:2246/Home/Search?query=哈哈哈
我们可以看到form的参数是直接显示到url后面的。
而如果使用post方法,如:
<form action="/Home/Search" method="post">
<input type="text" name="query"/>
<br />
<input type="submit" value="Seach"/>
</form>
运行效果图:
(这个是效果图)http://localhost:2246/Home/Search
这里form表单数据是没有体现在url参数上面的。而此时我们刷新页面,会看到:
(这个是效果图)"你所查找的网页要使用已输入的信息,返回此页可能需要重复进行的所有操作。。是否要继续操作?”"
如果是向数据库里提交数据,刷新页面极有可能就同时提交了两次相同的数据了。
再次说明,以上这个也是抄的,不过内容我精简了。以上的方式无非是POST或GET,Controller的写法一样,方法暴露参数。
再来看猛料:
MVC中的页面传值,通常指Controller和view之间的数据传递,经常用到的有几种方式,总结如下:
一、Controller----------->View
1、ViewData
获取或设置一个字典,其中包含在控制器和视图之间传递的数据。使用ViewData是采用键值对的形式,对所定义的数据进行传递。在View中会自动识别到拥有唯一键值的ViewData,并将数据显示出来。
例子:
public ActionResult() {
List<Models.BlogArticle> list = (from d in db.BlogArticles where d.AIsDel == false select d).ToList();
//2将集合数据传给视图
// ViewBag.DataList = list;
//viewBag形式
//利用viewdata形式
ViewData["DataList"] = list;
return View();
}
视图中接收:
<table id="tbList">
<tr>
<th>id</th>
<th>标题</th>
<th>分类</th>
<th>状态</th>
<th>时间</th>
<th>操作</th>
</tr>
<!--遍历Action方法,设置给ViewData的集合数据,生成html代码-->
@foreach (BlogArticle a in ViewData["DataList"] as List<BlogArticle>)
{
<tr>
<td>@a.AId </td>
<td>@a.ATitle </td>
<td>@a.ACate</td>
<td>@a.AStatu </td>
<td>@a.AUpdatetime </td>
<td>@a.AContent </td>
<td>
<a href="javascript:del(@a.AId)">删</a>
<a href="/home/modify/@a.AId">改</a>
</td>
</tr>
}
</table>
2、ViewBag
获取视图包,允许自定义属性进行赋值,属于动态类型(dynamic),以ViewBag.属性=属性值得方式进行传值,其实这里跟ViewData的使用原理类似。
例子:
public ActionResult Index() {
ViewBag.Title="Hello!";
}
视图中接收 <h1>ViewBag.Title</h1>
3、其他方式
在从controller向view传值时,除了以上两种方式外,还包括一些链接的方式,例如页面跳转的方式RedirectToAction,还有RenderAction等自动接收等方式。
二、从View-------->Controller
1、其实在这种情况下,通常会选择利用ajax来通过get或者post进行提交。如果采用最原始的JS来做,就要用到之前总结的ajax经典的五步工作法了,但是通常我们采用JQuery封装好的ajax提交方式。
即$.ajax({type,url,data,success:function(){})其中最常用的就是这几个参数属性了。
2、通过Get方式+路由配置+id值进行提交数据
<td>
<a href="javascript:del(@a.AId)">删</a>
</td>
JS:
<script type="text/javascript">
function del(id) {
if (confirm("您确定要删除吗?亲~~")) {
window.location = "/home/del/" + id;//通过get方式采用路由配置+id的形式
}
}
</script>
三、Action---------->Action
前面两种传值方式都是在view和Controller之间进行数据传递,那么如果某一个业务需要用到后台的两个Action,并且需要再这两个Action之间进行数据传递,这时需要用到另一个概念TempData:获取要传递到视图的临时数据.使用时,需要注意TempData的生命周期,只在第一次请求Action时临时数据存在,之后自动变为NULL,具体的使用与ViewData相同,属于键值对的数据字典类。
public ActionResult Index() {
this.TempData["str"]="wyy";
return View();
}
public ActionResult Index2() {
string name=this.TempData["str"];
return Content(name);
}
以上是在学习和实践MVC过程中经常用到的页面传值的几种方式,大的方向看来从C向V数据传递以ViewData为基础,扩展到ViewBag,更加方便快速了。
从V到C传递,则归于ajax中的get和post的提交了。
MVC传值汇总的更多相关文章
- Mvc传值
提到Mvc传值我想大多数人想到的是ViewBag,自3.0之后在控制器与视图之间传值绝大多数传值用到的对象就是ViewBag.对于笔者以前做过的一些小的项目,貌似不需要考虑什么,但对于稍微大些的项目涉 ...
- ASP.NET MVC 教程汇总
自学MVC看这里——全网最全ASP.NET MVC 教程汇总 MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要 ...
- 全网最全ASP.NET MVC 教程汇总
全网最全ASP.NET MVC 教程汇总 MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MV ...
- 自学MVC看这里——全网最全ASP.NET MVC 教程汇总(转)
自学MVC看这里——全网最全ASP.NET MVC 教程汇总 MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要 ...
- 自学MVC看这里——全网最全ASP.NET MVC 教程汇总【转】
自学MVC看这里——全网最全ASP.NET MVC 教程汇总 http://www.cnblogs.com/powertoolsteam/archive/2015/08/13/4667892.html ...
- 自学MVC看这里——全网最全ASP.NET MVC 教程汇总
MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口.本文从 ...
- MVC 传值
1.ViewBag Controller:ViewBag.Message = "Hello, Word"; View:@ViewBag.Message 注:View ...
- Java Web的传值汇总(含JavaBean)
前言: 其实JavaBean就像asp.net MVC上的Model传值一样.
- Core Mvc传值Query、Form、Cookies、Session、TempData、Cache
1.传值方法 使用Request的方法(1-3): 1)Query:获取链接?后面的值 如:http://localhost:55842/Home/About?name=kxy public IAct ...
随机推荐
- u3d 模型ID配置
换模型为什么要改代码 0.0 你没有逻辑ID->模型的配置么. 做2个配置.. 分别是角色的ID对应模型路径. 然后是里面的动画名对应真实动画名. 比如 ID=1 path = "xx ...
- php安全配置记录
Php环境部署完成后,通常我们会进行一些安全设置.除了熟悉各种PHP漏洞外,还可以通过配置php.ini来加固PHP的运行环境.PHP官方也曾经多次修改php.ini的默认设置. 接下来,推荐php. ...
- Git技巧总结分享
接触Git有很长一段时间了,从最初的不懂到逐渐熟悉运用,相比于SVN,更热衷于Git这一款强大的版本控制工具. 废话不多说,下面对Git做了一些技巧总结,在此分享下,希望能帮助到一些喜欢Git的朋友们 ...
- 纯CSS3实现兔斯基简单害羞表情
前言 很不巧前天突然就感冒了,都怪自己吃太多饼干导致上火了.整个人都无精打采.本来想多做几个兔斯基表情的,但身体发热很难受.所以就只完成一个简单点的表情耍一耍. 正文 先看一下这个简单到不能再简单的小 ...
- JS的Document属性和方法
Attributes 存储节点的属性列表(只读)childNodes 存储节点的子节点列表(只读)dataType 返回此节点的数据类型Definition 以DTD或XML模式给出的节点的定义(只读 ...
- 解决 Windows Update 时提示当前无法检查更新,因为未运行服务
故障:打开“Windows Update”出现红色盾牌图标 点击“检查更新”,出现“Windows Update 当前无法检查更新,因为未运行服务.您可能需要重新启动计算机” 查看“Windows U ...
- GridView自定义删除操作
今天,我们这里要说的就是在GridView里面如何新添加一行“删除”列,如何删除前弹出通知等. 首先,我们前端的代码如下: <asp:GridView ID="gridViewDxjk ...
- JS 之DOM对象(2)
http://www.cnblogs.com/zourong/p/4792394.html 这篇文件介绍了DOM1中的一些属性和方法,下面的内容主要介绍DOM2和DOM3中新增的内容. 框架的变化 框 ...
- [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法
12.3 We have the following method used in a chess game: boolean canMoveTo( int x, int y). This metho ...
- 记一次w3wp占用CPU过高的解决过程(Dictionary和线程安全)
项目上线以来一直存在一个比较揪心的问题,和一个没有信心处理的BUG,那就是在应用程序启动时有可能会导致cpu跑满99%或持续在一个值如50%左右,这样一来对服务器的压力是非常大的,经常出现服务器无法远 ...