asp.net mvc 页面传值的方法总结
转自:http://msprogrammer.serviciipeweb.ro/2012/01/15/usual-methods-to-transfer-data-from-page-to-page-in-asp-net-mvc/
Usual Methods to transfer data from Page To Page in ASP.NET MVC
Preamble:
In ASP.NET ( like in PHP and other Web frameworks) there are 2 clear entities: Server ( code on the WebServer ) and Client( the HTML interpreted by the browser and javascript).
Server and Client shares same cookies – means Client and Client both can read and write cookies.
Transfer from the Client to Server happens when
a) you click a link : the information to transfer is query string . That means, http://…/a?x=y&a=b will send information y ( associated to key x) and b( associated to key a). This is called a GET
b) you press a submit button to send a FORM : the information is values of select and input. This is called a POST.
c) you send information via javascript ( including AJAX) . Usually this can involve a PUT, a GET, or other ( see REST ).
d) Creating/Modifying and send cookies. The sending happens automatically by the browser .
Transfer from the Server to Client
a)sending text(HTML)/binary data. . The interpretation is done by the browser( how to display html, how to display send file …)
b) Creating/Modifying and send cookies . Browser will do automatically this.
ASP.NET WebForms way:
For ASP.NET Webforms the modalities to transfer are detailed by Peter Bromberg , http://www.eggheadcafe.com/tutorials/asp-net/e653f028-01fb-4d0e-843b-058deae562a2/eight-different-ways-to-transfer-data-from-one-page-to-another-page.aspx .
ASP.NET MVC way:
I want to discuss from ASP.NET MVC perspective. In MVC we have 2 distinct objects: VIEW and ACTION. Both happens to run on the Server .
- The ACTION can return a VIEW or ( or a redirect to) another ACTION or simply a FILE
- The VIEW processes a Model ( and a ViewBag/ViewData) and sends the text( HTML) data to the Client .
Instead of PAGES , we will discuss of VIEWS – because the VIEWS sends HTML data to the Client.
So, to transfer data between View1 to View2 in MVC is reduced to this:
a) Page1 transfer data to the server ACTION1( by a,b,c,d methods in the Preamble )
b) The Action receives the values as his parameters ( by binding) and can do this:
b1) Return a different View ( using some logic :
if( a )
return View1(Model1);
else
return View2(Model1);
b2) Returning a Redirect to ACTION2 ( that return View2) or simply return the result of this action
return RedirectToAction(Action2(<parameters>)); //Used in Post/Request/GET, http://en.wikipedia.org/wiki/Post/Redirect/Get
return Action2(<parameters>);
Resuming: Transfer betweem PAGE to PAGE in ASP.NET MVC is really transfering from ACTION to ACTION , besides the cookie that can be transferred directly by the browser.
9 Modalities to transfer data from Page to Page in ASP.NET MVC
Enough theory, let’s do some code. We have a Model to transfer named ModelTransfer
|
1
2
3
4
5
6
7
|
public class ModelTransfer { public int Age { get; set; } public string Name { get; set; } } |
We have the first View1( Index) and a second View2(Transfer) that will server as an example. Also, we will have the more ACTIONS – one for each example of transfer – all are using the TRANSFER action as an ultimate resort do see the View.
Method1 : Transfer directly to the second View/Action .
|
1
|
<a href='@Url.Action("Transfer", new { Age = 42, Name = "Andrei Ignat" })'>click me</a> |
|
1
|
public ActionResult Transfer(ModelTransfer m) |
Method2 Index sends POST data to a [HttpPost] Index action, that performs some calculations and return a redirect.Usefull in PRG
|
1
2
3
4
5
|
@using (Html.BeginForm()) { <input type="text" id="Age" name="Age" value="42" /><input type="text" id="Name" name="Name" value="Andrei Ignat"/><input type="submit" value="Click me" />} |
|
01
02
03
04
05
06
07
08
09
10
|
[HttpPost] public ActionResult Index(ModelTransfer m) { //save to the database the data //this is for transferring alert data - such an "Completed saving" message to the user TempData["displayalert"] = " this is from Index POST action!"; //used in PRG return RedirectToAction("Transfer", new ModelTransfer() { Age = m.Age, Name = m.Name }); } |
Method3: No data send. The ServerAction just make some data to be transferred to the Transfer view, by TempData
|
1
|
<a href='@Url.Action("ServerAction")'>click me</a> |
|
1
2
3
4
5
6
7
8
|
public ActionResult ServerAction() { //You can put also into the Session / Application /Cache depending on your specifications TempData["MyModel"]=new ModelTransfer(){ Age = 42, Name = "Andrei Ignat"}; TempData["displayalert"] = "this is from Server action!"; return RedirectToAction("Transfer"); } |
Method4: No data send. The ServerAction just make some data to be transferred to the Transfer view, by Cache
Method5: No data send. The ServerAction just make some data to be transferred to the Transfer view, by Session
Method6: No data send. The ServerAction just make some data to be transferred to the Transfer view, by Application
Method7: No data send. The ServerAction just make some data to be transferred to the Transfer view, by HttpContext Items
Method8: By Cookies
|
1
|
<a href='@Url.Action("TransferCookies")'>click me</a> |
|
1
2
3
4
5
6
|
HttpCookie cook = new HttpCookie("Transfer"); //usually you put here more , but now I do not want to interfere with other methods cook.Expires = DateTime.Now.AddSeconds(1); cook.Value = "from transfer cookies"; Response.Cookies.Add(cook); return RedirectToAction("Transfer"); |
Method9: By Javascript /Ajax.
It is an entire post by itself and you can see here:
http://msprogrammer.serviciipeweb.ro/2011/12/05/jquery-ajax-request-and-mvcdetailed/
Summary
In this post you have seen 9 methods to transfer data in MVC. As a bonus, the page dispolays also a message with Javascript( usefull for messaging like “Data Saved to database” messages to the user.
The code source you will find here:
Transfer Data Page to Page
It is made with Razor and MVC3 – but you can replace Razor with aspx and MVC3 with MVC2 also.
If you think I can improve this post, please leave some comment.
Notes:
I used here hard coding values. Please learn about T4MVC and Html.EditorFor !
To learn more about ASP.NET MVC visit http://asp.net/mvc.
Default TempDataProvider is based on Session. There is one more , based on cookies.
Please do the exercises to gain self knowledge about MVC
This entry was posted on Sunday, January 15th, 2012 and is filed under ASP.NET MVC, full. You can follow any responses to this entry through RSS 2.0. You can leave a response, or trackback from your own site.
asp.net mvc 页面传值的方法总结的更多相关文章
- Asp.net mvc页面传值-- dropdownlist
后台传值 List<ConfigParamInfo> paramList = configParamBLL.GetModelList(" and parentID=1" ...
- Asp.net 页面传值的方法
ASP.NET页面传值的方法 From:Refresh-air 在面试的时候,经常会遇到这样的问题,其实我们会对其中的几种方法比较熟悉,因为项目中经常使用.但是要全面的回答ASP.NET中页面传值的方 ...
- ASP.NET页面传值的方法
ASP.NET页面传值的方法 From:Refresh-air 在面试的时候,经常会遇到这样的问题,其实我们会对其中的几种方法比较熟悉,因为项目中经常使用.但是要全面的回答ASP.NET中页面传值的方 ...
- ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)
在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图.但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好.打开Models \ Movie ...
- c#ASP.NET中页面传值共有这么几种方式
一.目前在ASP.NET中页面传值共有这么几种方式: 1.Response.Redirect("http://www.hao123.com",false); 目标页面和原页面可以在 ...
- Asp.Net MVC页面静态化功能实现一:利用IHttpModule,摒弃ResultFilter
上一篇有提到利用IHttpModule和ResultFilter实现页面静态化功能.后来经过一些改动,将ResultFilter中要实现的功能全部转移到IHttpModule中来实现 Asp.Net ...
- Asp.Net MVC页面静态化功能实现一:利用IHttpModule和ResultFilter
由于公司现在所采用的是一套CMS内容管理系统的框架,所以最近项目中有一个需求提到要求实现页面静态化的功能.在网上查询了一些资料和文献,最后采用的是小尾鱼的池塘提供的 利用ResultFilter实现a ...
- ASP.NET中页面传值
一.目前在ASP.NET中页面传值共有这么几种方式: 1.表单提交, <form action= "target.aspx" method = "post&q ...
- Asp.net MVC 权限过滤器实现方法的最佳实践
在项目开发中,为了安全.方便地判断用户是否有访问当前资源(Action)的权限,我们一般通过全局过滤器来实现. Asp.net MVC 页面中常见的权限判断使用过滤器主要在以下几种情况(根据权限判断的 ...
随机推荐
- Linux中“新旧”TCP/IP工具的对比
如今很多系统管理员依然通过组合使用诸如ifconfig.route.arp和netstat等命令行工具(统称为net-tools)来配置网络功能.解决网络故障,net-tools起源于BSD的TCP/ ...
- LinkedHashSet与TreeSet
区别 类型 实现 特点 TreeSet hashMap.实现sortedSet接口 升序(基本类型--),自定义 LinkedHashSet HashSet 初始顺序 **注意点: 1.treeSet ...
- SQLITE 时间字段操作函数
SQLite中的时间日期函数 这是我学习SQLite时做的笔记,参考并翻译了Chris Newman写的<SQLite>中的<Working with Dates and Times ...
- ZOJ 1047 Image Perimeters
原题链接 题目大意:鼠标点击一块,求与之联通的所有区域的边长之和. 解法:广度优先搜索.从选中的这个点开始,往周围8个点依次搜索,访问过的点做上标记.如果该点上下左右的一个或多个方向没有相邻的点,边长 ...
- SQL注入测试平台 SQLol -2.SELECT注入测试
前面,我们已经安装好了SQLol,打开http://localhost/sql/,首先跳转到http://localhost/sql/select.php,我们先从select模块进行测试. 一条完成 ...
- bootstrap部分---网格系统;(几天没写博客了,为了潜心研究一下bootstrap)
1工作原理: (1)行必须放置在 .container class 内,以便获得适当的对齐(alignment)和内边距(padding). (2)使用行来创建列的水平组. (3)内容应该放置在列内, ...
- google-http-java-client(android学习篇)
package com.example.android; import java.io.IOException; import java.util.HashMap; import android.ap ...
- Android——ListView相关作业(修改版)
给GridView提供点击按钮添加新数据,单击项目修改,长按删除功能 activity_practise7的layout文件: <?xml version="1.0" enc ...
- java计算文件32位md5值
protected static String getFileMD5(String fileName) { File file = new File(fileName); if(!file.exist ...
- Java——IO(输入输出流)
* * 想要知道开发时用到哪些数据对象,只要通过四个明确即可: * 1.明确源,和目的: * 源: InputStream reader * 目的: OutPutStream Write ...