方法一:

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. work_queue 函数调用栈

    init_workqueues --->  create_worker --> kthread_create_on_node

  2. eclipse(adt-bundle)的Android SDK Manager下载不了谷歌的东西怎么办?

    那就是换镜像! 腾讯镜像:android-mirror.bugly.qq.com 端口:8080 腾讯镜像使用方法:http://android-mirror.bugly.qq.com:8080/in ...

  3. C#基础系列:开发自己的窗体设计器(PropertyGrid显示中文属性名)

    既然是一个窗体设计器,那就应该能够设置控件的属性,设置属性最好的当然是PropertyGrid了,我们仅仅需要使用一个PropertyGrid.SelectedObject = Control就可以搞 ...

  4. GIS开源软件大全

    3 - F 3map:行星地球项目由3map驱动,这是一个自由软件,由Telstra宽带基金会创建并支持,提供客户端与服务器的能力以在线再现虚拟地球. Amein!:其界面介于ArcMap和UMN M ...

  5. 用python简单处理图片(4):图像中的像素访问

    前面的一些例子中,我们都是利用Image.open()来打开一幅图像,然后直接对这个PIL对象进行操作.如果只是简单的操作还可以,但是如果操作稍微复杂一些,就比较吃力了.因此,通常我们加载完图片后,都 ...

  6. Google protocol buffer在windows下的编译

    在caffe框架中,使用的数据格式是google的 protocol buffer.对这个不了解,所以,想简单学习一下.简单来说,Protocol Buffer 是一种轻便高效的结构化数据存储格式,可 ...

  7. [C++] 在Visual Studio工程中管理C++第三方库

    目前的项目依赖于很多第三方库,每次要再一个新的环境编译/运行,都要花很长时间先编译/安装各种第三方库,而且会出现各种问题,因此决定将所有第三方库编译好之后,放入工程的子目录中,以后就不用重复编译了. ...

  8. Arduino小车学习与研究博客

    Arduino小车学习与研究博客 信安系统设计基础实践模块 Arduino小车学习与研究 ================== 陈都(20135328) 余佳源(20135321) 莫凡(201352 ...

  9. warning: LF will be replaced by CRLF

    一. Git提供了一个换行符检查功能(core.safecrlf),可以在提交时检查文件是否混用了不同风格的换行符.这个功能的选项如下: false - 不做任何检查warn - 在提交时检查并警告t ...

  10. iOS中偏好设置的创建,数据写入与读取

    NSUserDefaults与NSDictinary? 应用通过NSUserDefaults用键值对的方式来读取和保存偏好设置数据,与通过键从NSDictionary对象中获取数据一样,不同之处在于N ...