这几天一直在鼓捣传值的这个东西,之前只知道个ViewData,ViewBag,其他的就不会了。在之前学习ViewData和ViewBag的时候,只传了简单的一个字符串。可是现在,我们要传递的数据不仅仅是字符串啊,可能是一个List对象,也可能是Json串。于是做了一些小例子,总结一下传值的经验。
从Controller向View传值的主要有4种:ViewData,ViewBag,TempData,Model。当然我们还可以添加JS代码进行传值。
ViewData就是一个字典,它存放的是键值对。只对当前的View有效.
controller代码:
public ActionResult Index() { ViewData["MessageOne"] ="Hello Cindy,I send the message to you by using the ViewData!"; return View(); }
页面代码:
<h3>@ViewData["MessageOne"]</h3>
controller代码:
public ActionResult Index() { var person =new List<string> { "Cindy", "23", "Girl" }; ViewData["Person"] =person; }
页面代码:
<h3>Hello,Cindy!Isend you a list by using the ViewData:</h3> <ul> @foreach (var person in(List<string>) ViewData["Person"]) { <li> @person </li> } </ul>
ViewBag存放的不是键值对,是dynamic动态类型,它不需要转型就可以使用里面的值。
controller代码:
public ActionResult Index() { ViewBag.MessageOne = "Hello Cindy,I send the message to you by usingthe ViewBag!"; return View(); }
页面代码:
<h3>@ViewBag.MessageOne</h3>
controller代码:
public ActionResult Index() { var person =new List<string> { "Cindy", "23", "Girl" }; ViewBag.Person = person; }
页面代码:
<h3>Hello,Cindy!Isend you a list by using the ViewBag:</h3> <ul> @foreach (var person in ViewBag.Person) { <li> @person </li> } </ul>
TempData其实和ViewData的用法类似,但是TempData可以用于不同View之间的传值,而不向ViewData一样只对当前的View有效。
controller代码:
public ActionResult Index() { this.TempData["MyName"] ="Cindy"; return View(); } public ActionResult Index1() { string MyName ; MyName=this.TempData["MyName"].ToString (); return View(); }
页面绑定:和ViewData绑定一样。
注意:当我们第一次访问Index页面之后,再访问Index1的时候,在Index1页面就会绑定上值“Cindy”,但当我们刷新Index1页面的时候,值就消失了。
通过model来进行传值是通过强类型来进行绑定的,我们只需在View中通过Model对应的属性就可以获得相应的指。
首先,我们在Model文件夹下,建立一个model,类名为PersonModel.cs。
public partial class PersonModel { public string name { get; set; } public int age { get; set; } public string sex { get; set; } }
紧接着,在controller中写入:
public ActionResult Index() { PersonModel person = new PersonModel(); person.age = 23; person.name = "cindy"; person.sex = "gril"; return View(person); }
然后,在页面中通过Model的属性来获取属性的值。
<h3>Name:@Model.name</h3>
最后,看效果图:
五、AJAX代码进行Controller和View之间的传值
Controller代码:
public JsonResult JsonDemo() { var person = new { Name = "Cindy", Age = 23, Sex = "Girl" }; return Json(person); }
JS代码:
$(function () { $.ajax({ type: "POST", dataType: "json", url: "/GetDataFrom/JsonDemo", success: function (data) { if (data.length < 1) { alert("没有查到数据"); } contentName = data.Name; document.getElementById("name").innerHTML = "您的姓名为:"+contentName; contentSex = data.Sex; document.getElementById("sex").innerHTML = "您的性别为:"+contentSex; contentAge = data.Age; document.getElementById("age").innerHTML = "您的年龄为:" + contentAge; }, }); });
以上代码中的URL指的是controller中要传值的方法。data,为返回的数据。后面我们将返回的数据绑定到View中相应的id上即可显示数据。如果要将传值类型改为GET的话,我们就要在Controller返回值类型的参数中加入, JsonRequestBehavior.AllowGe,要不然页面是无法获取值的。
自己动手敲例子,虽然花了不少时间,但是也值了,相比第一次写来说,速度快了很多,可以自己写代码了。当我没有弄出来的时候,觉得这个东西怎么这么难啊,可是当我做出来的时候,我就又会觉得这个东西其实挺简单的,我怎么用了这么长时间啊。还是写代码写的少,以后要看API文档,多动手自己写代码。
总结一句话:多动手实践,成功就离我不远了。