MVC中的Controller不能直接的訪问View层中的控件,那么是怎样的将Controller中值传到View中,经常使用的有4种

ViewData:

         是获取或设置视图的字典对象,它里面存放的是键值对,就能够通过键来获得值。

注意:它的生命周期和View同样。仅仅对当前的Action有效。

使用ViewData从Controller向View层传递数据显示:

在Controller中
public ActionResult Index()
{
ViewData["key"] = "我是通过键获得的值";
return View();
}


在View中
<div>
@* 通过控件显示,须要注意的是必须使用和ViewData中一样的key名字 *@
@Html.TextBox("key")@*在textbox中显示*@
@Html.TextArea("key")@*在输入框中显示*@

@* 直接显示 *@
@ViewData["key"]

</div>

        显示效果:

MVC中从Controller像View层传值_html

TempData:

       它的用法和ViewData同样。仅仅是TempDate能够再全部的View中訪问,能够再不同的Action之间传值。有点类似Session。TempData的生命周期是一个http请求的时间,及从一个页面跳转到还有一个页面的时间。

在Controller中
public ActionResult Index()
{
TempData["value"] = "TempDate測试-杨晓菲";
return View();
}
public ActionResult Index1()
{
TempData["value1"] = TempData["value"].ToString();
return View();
}

        显示效果:

MVC中从Controller像View层传值_mvc_02

               显示的效果如上,可是须要注意的是,由于Index1中的数据是从Index中来的。所以要想显示出效果。必须在訪问Index1之前先訪问Index,否则就无法显示。

         并且还须要注意的是在使用TempData在不同Action之间传值时,不能提前使用。

比方在上例中要想在Inde1的View中显示TempData的值,在Index中的View中就不能使用TempData,由于TempData的生命周期是一次http请,假设在Index中使用就相当一次请求。在Index1中使用就会清空就无法显示。


ViewBag:

            是一个动态属性,就是我们能够自己给ViewBag写属性。

在Controller中
public ActionResult Index()
{
//当中的name和value都是给ViewBag动态加入的属性
ViewBag.name = "MVC";
ViewBag.value = "传值";
return View();
}


在html中:
<div>
@* 通过控件显示 ,使用时注意属性名*@
@Html.TextBox("name")
@Html.TextArea("value")
@* 直接显示 *@
@ViewBag.name
@ViewBag.value
</div>

        显示效果:

MVC中从Controller像View层传值_html_03

Model:

                    MVC本身带着Model层,当中能够使用EF映射相应的数据库,当中依据数据库生成的实体能够直接的传值。这事实上就是三层中的实体层。

在Controller中
public ActionResult Index1()
{

MvcTest.Models.news news = new news();//实例化实体
news.title = "社会新闻";
news.content = "最热的新闻";
return View(news);
}

然后给Index1 加入视图

MVC中从Controller像View层传值_json_04

在View中自己主动生成代码

MVC中从Controller像View层传值_mvc_05

显示效果例如以下:

MVC中从Controller像View层传值_json_06


Json

                 Json返回的是字符串。在字符串中获取须要的字view中进行显示


在Controller中                                                                                                                                                       ISetUpBll setUpInfo = SpringHelper.GetObject<ISetUpBll>("SetUpBll");
List<MenuByBatchViewModel> FileWagesAdvanced = setUpInfo.QuerySeniorByName("档案工资"); //得到一个list
return Json(FileWagesAdvanced, JsonRequestBehavior.AllowGet);//将得到的list依次的转换为json字符串

         在view中。这里是结合EasyUI显示的。当中的field就是json串中的标识符,相应的行显示的就是那个字段的值,

columns: [[
{ field: 'ck', checkbox: true },
{ title: '档案编号', field: 'ID', sortable: true },
{ title: '姓名', field: 'name', sortable: true },
{ title: '性别', field: 'sex', sortable: true },
{ title: '身份证号', field: 'idNumber', sortable: true }
]]


显示效果:


MVC中从Controller像View层传值_html_07


小结

        MVC刚開始仅仅对它有个了解。在实际的使用了解到Controller和View之间的传值是MVC比較重要的知识点。学习就是这样一个过程先知道一个东西然后再開始了解这个东西相关的知识,等熟悉了之后就開始跟我们学过的知识进行比較,一点一点的掌握。