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()); //Used in Post/Request/GET, http://en.wikipedia.org/wiki/Post/Redirect/Get return Action2(); 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 click me ? 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()) { } ? 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 click me ? 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 click me ? 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 by: http://msprogrammer.serviciipeweb.ro/2012/01/15/usual-methods-to-transfer-data-from-page-to-page-in-asp-net-mvc/

Comments