日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > web前端 > htmlcss > ASP.NET MVC3中Controller與View之間的數據傳遞總結

ASP.NET MVC3中Controller與View之間的數據傳遞總結

來源:程序員人生   發布時間:2015-01-12 08:26:05 閱讀次數:4806次
在ASP.NET MVC中,常常會在Controller與View之間傳遞數據,因此,熟練、靈活的掌握這兩層之間的數據傳遞方法就非常重要。本文從兩個方面進行探討:

1、  Controller向View傳遞數據

1.       使用ViewData傳遞數據

我們在Controller中定義以下:
ViewData[“Message_ViewData”] = “ Hello ViewData!”;
然后在View中讀取Controller中定義的ViewData數據,代碼以下:
@Html.Encode(ViewData["Message_ViewData"])
js中讀取ViewData中數據以下:
<pre name="code" class="javascript"><script type="text/javascript"> var viewData = '@ViewData["Message_ViewData"]'; </script>


2.       使用ViewBag傳遞數據

我們在Controller中定義以下:
ViewBag.Message_ViewBag = “ Hello ViewBag !”;
然后在View中讀取Controller中定義的ViewBag數據,代碼以下:
@Html.Encode(ViewBag.Message_ViewBag)

js中讀取ViewBag中數據以下:

<script type="text/javascript"> var viewBag= '@ViewBag.Message_ViewBag'; </script>

3.       使用TempData傳遞數據

我們在Controller中定義以下:
TempData[“Message”] = “Hello word!”;
然后在View中讀取Controller中定義的TempData數據,代碼以下:
@Html.Encode(TempData["Message_TempData"])
js中讀取TempData中數據以下:
<script type="text/javascript"> var tempData = '@TempData["Message"]'; </script>

4.   使用Model傳遞數據

首先要創建Model實體類:
public class HelloModel { private string _name; public string Name { get { return _name; } set { _name = value; } } private string _text; public string Text { get { return _text; } set { _text = value; } } }

使用Model傳遞數據的時候,通常在創建View的時候我們會選擇創建強類型View以下圖所示:


模型類下拉列表框當選中剛才創建的HelloModel
創建強類型的View以后,View的第1行代碼以下所示:
@model Test.Models.HelloModel
就代表了這個View使用的Model為“Test.Models.HelloModel”
然后在View中讀取Model中定義的數據,代碼以下:
@Html.Encode(Model.Name)
js中讀取Model中數據以下:
<script type="text/javascript"> var modelName = '@Model.Name'; </script>
總結:

1.         ViewData與TempData方式是弱類型的方式傳遞數據,而使用Model傳遞數據是強類型的方式。
2.         ViewData與TempData是完全不同的數據類型,ViewData數據類型是ViewDataDictionary類的實例化對象,而TempData的數據類型是TempDataDictionary類的實例化對象。
3.         TempData實際上保存在Session中,控制器每次履行要求時都會從Session中獲得TempData數據并刪除該Session。TempData數據只能在控制器中傳遞1次,其中的每一個元素也只能被訪問1次,訪問以后會被自動刪除。
4.         ViewData只能在1個Action方法中進行設置,在相干的視圖頁面讀取,只對當前視圖有效。理論上,TempData應當可以在1個Action中設置,多個頁面讀取。但是,實際上TempData中的元素被訪問1次以后就會被刪除。
5.  在MVC3開始,視圖數據可以通過ViewBag屬性訪問,在MVC2中則是使用ViewData。MVC3中保存了ViewData的使用,有關他們之間的區分可以參考這個文章。

    MVC3中 ViewBag、ViewData和TempData的使用和區分

2、   View向Controller傳遞數據

在ASP.NET MVC中,將View中的數據傳遞到控制器中,主要通過發送表單的方式來實現。具體的方式有:

1.   通過Request.Form讀取表單數據

我們在View層做以下定義:
@using (Html.BeginForm("HelloModelTest", "Home", FormMethod.Post)) { @Html.TextBox("Name"); @Html.TextBox("Text"); <input type="submit" value="提交" /> }
注意:
HelloModelTest為對應的Action名,Home為對應的Controller名稱
然后在Controller層,通過Request.Form讀取表單數據的代碼以下所示:
[HttpPost] public ActionResult HelloModelTest() { string name= Request.Form["Name"]; string text= Request.Form["Text"]; return View(); }

2.  通過FormCollection讀取表單數據

我們在View層做以下定義:
@using (Html.BeginForm("HelloModelTest", "Home", FormMethod.Post)) { @Html.TextBox("Name"); @Html.TextBox("Text"); <input type="submit" value="提交" /> }
然后在Controller層,通過FormCollection讀取表單數據的代碼以下所示:
[HttpPost] public ActionResult HelloModelTest(FormCollection fc) { string name= fc["Name"]; string text = fc["Text"]; return View(); }

 3.   模型綁定

我們在View層做以下定義:
@using (Html.BeginForm("HelloModelTest", "Home", FormMethod.Post)) { @Html.TextBox("Name"); @Html.TextBox("Text"); <input type="submit" value="提交" /> }

默許的模型綁定

 相較于從要求中獲得表單值,下面的Edit Action則是簡單地以1個模型對像為參數(Album):
[HttpPost] public ActionResult HelloModelTest( HelloModel model) { // ... }
當你的Action方法是以1個模型對象充當參數時,MVC運行時將會用模型綁定來構建該參數。默許用于模型綁定的是 DefaultModelBinder,以上述的HelloModel為例,DefaultModelBinder將會檢索出所有可用的HelloModel屬性用于綁定模型。根據命名約定,DefaultModelBinder能夠自動地在要求中獲得相應的值來填充HelloModel對象(它還能創建1個對象的實例來填充)
換句話說,假定HelloModel有1個Name屬性,那末模型綁定就會在要求中查找名為Name的參數。注意我說的是在“要求中”,而不是“表單集合”中。模型綁定會在要求中的各個方面進行值查找,這里面包括路由數據,查詢字符串,表單集合。有必要的話你還可以添加自定義的值提供信息。
 模型綁定不并局限于Http Post及復雜參數(如HelloModel),你完全可以傳入1個原始的簡單參數:
public ActionResult HelloModelTest( string name,string text) { // …. }
在該場景中,模型綁定將會在要求中查找名為name,text 的參數。

顯式模型綁定

當Action有參數的時候,會隱式地履行模型綁定。你還可以在控制器里面使用UpdateModel和 TryUpdateModel來顯式調用模型綁定。調用UpdateModel的時候,如果模型對象是無效的或綁定期間產生毛病則會拋出異常。TryUpdateModel則不會拋出異常,它返回1個布爾值:如果綁定成功并且模型驗證通過則返回true,否則返回false。
[HttpPost] public ActionResult HelloModelTest( ) { HelloModel model = new HelloModel(); if (this.TryUpdateModel(model)) { //綁定成功 } else { //綁定失敗 } }

模型狀態是模型綁定產生的副產物。每次綁定器綁定值到模型時,都會在模型狀態中進行記錄。你可以在模型綁定以后查看模型狀態來判斷綁定是不是成功:
[HttpPost] public ActionResult HelloModelTest( ) { HelloModel model = new HelloModel(); this.TryUpdateModel(model); if (ModelState.IsValid) { //綁定成功 } else { <pre code_snippet_id="569649" snippet_file_name="blog_20150102_21_3590846" name="code" class="csharp"><span style="white-space:pre"> </span>//綁定失敗
}}

如果在模型綁定進程中產生異常,模型狀態里面就會包括致使異常的那個屬性名,綁定值和毛病信息。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产精品久久久久久久久久不蜜月 | 午夜在线 | 久久久久久久91 | 亚洲成人精品一区二区 | 秋霞精品| 欧美日韩视频 | 久久久久久久久久av | 国产在线观看一区 | 久久9精品 | 日本美女一区二区三区 | 国产成人精品免费视频 | 爱爱视频免费看 | 五月天丁香社区 | 午夜精品久久久久久久久久久久久 | 国产成人精品一区 | 99re在线视频免费观看 | 欧美黄色录像 | 久久久久久国产精品免费 | 99热在线看| 精品国产乱码久久久久久久软件 | 免费国产福利 | 一区视频免费观看 | 欧美日韩乱国产 | 久久久久成人精品 | 亚洲一区二区三区四区精品 | 中文字幕不卡在线 | 激情综合五月天 | 精品91在线| 精品久久9| 国产一区中文字幕 | 日本久久久久久久 | 狠狠综合久久av一区二区老牛 | 精品国产第一国产综合精品 | 久久精品久久久久 | 久久久久www | 一级毛片免费视频 | 午夜精品久久久久久久蜜桃 | 在线观看av网 | 久久久精品免费视频 | 国产精品国产三级国产aⅴ9色 | 亚洲一区在线观看视频 |