方法一:

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传值汇总的更多相关文章

  1. Mvc传值

    提到Mvc传值我想大多数人想到的是ViewBag,自3.0之后在控制器与视图之间传值绝大多数传值用到的对象就是ViewBag.对于笔者以前做过的一些小的项目,貌似不需要考虑什么,但对于稍微大些的项目涉 ...

  2. ASP.NET MVC 教程汇总

    自学MVC看这里——全网最全ASP.NET MVC 教程汇总   MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要 ...

  3. 全网最全ASP.NET MVC 教程汇总

    全网最全ASP.NET MVC 教程汇总 MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MV ...

  4. 自学MVC看这里——全网最全ASP.NET MVC 教程汇总(转)

    自学MVC看这里——全网最全ASP.NET MVC 教程汇总   MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要 ...

  5. 自学MVC看这里——全网最全ASP.NET MVC 教程汇总【转】

    自学MVC看这里——全网最全ASP.NET MVC 教程汇总 http://www.cnblogs.com/powertoolsteam/archive/2015/08/13/4667892.html ...

  6. 自学MVC看这里——全网最全ASP.NET MVC 教程汇总

    MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口.本文从 ...

  7. MVC 传值

    1.ViewBag    Controller:ViewBag.Message = "Hello, Word";    View:@ViewBag.Message   注:View ...

  8. Java Web的传值汇总(含JavaBean)

    前言: 其实JavaBean就像asp.net MVC上的Model传值一样.

  9. Core Mvc传值Query、Form、Cookies、Session、TempData、Cache

    1.传值方法 使用Request的方法(1-3): 1)Query:获取链接?后面的值 如:http://localhost:55842/Home/About?name=kxy public IAct ...

随机推荐

  1. 解决Linux中java.net.UnknownHostException: oracledb.sys.iflashbuy.com问题

    Linux环境报java.net.UnknownHostException: oracledb.sys.iflashbuy.com,原因为Linux下无法解析oracledb.sys.iflashbu ...

  2. Windows安装 ANT

    apache-ant-1.7.1-bin.zip 下载地址:http://ant.apache.org/bindownload.cgi 第一步      解压apache-ant-1.7.1-bin. ...

  3. python playfair

    #########################Playfair密码######################### #约定1:若明文字母数量为奇数,在明文末尾添加一个'Z' #约定2:'I'作为 ...

  4. 浅谈VC++中预编译的头文件放那里的问题分析

    用C++写程序,肯定要用预编译头文件,就是那个stdafx.h.不过我一直以为只要在.cpp文件中包含stdafx.h 就使用了预编译头文件,其实不对.在VC++中,预编译头文件是指放到stdafx. ...

  5. How to configure SRTM elevations in WorldWind WMS

    In this thread I will try to explain how to serve SRTM elevations using NASA WorldWind WMS. ! Import ...

  6. eclipse使用

    Eclipse 是一个开放源代码的.基于 Java 的可扩展开发平台. Eclipse 是 Java 的集成开发环境(IDE),当然 Eclipse 也可以作为其他开发语言的集成开发环境,如C,C++ ...

  7. 配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法

    今天遇到了这个问题, 电脑系统:vs2010 win7系统 iis7 我运行在iis中配置的那个网站后,报错:错误代码 0x800700b7 配置错误定义了重复的“system.web.extensi ...

  8. vi 命令 用法

    一.Unix编辑器概述 编辑器是使用计算机的重要工具之一,在各种操作系统中,编辑器都是必不可少的部件.Unix及其相似的ix 操作系统系列中,为方便各种用户在各个不同的环境中使用,提供了一系列的ex编 ...

  9. java系列:《java核心技术 卷1》学习笔记,chapter 11 调试技巧

    11. 6 调试技巧 1)一个不太为人所知却非常有效的技巧是在每个类中放一个main方法,这样就可以对每个类进行单元测试.这个方法可以保留,因为在java虚拟机只调用启动类的main方法. 2)   ...

  10. 获取iOS系统版本 --- UIDevice

    UIDevice类是一个单例,其唯一的实例( [UIDevice currentDevice] ) 代表了当前使用的设备. 通过这个实例,可以获得设备的相关信息(包括系统名称,版本号,设备模式等等). ...