zoukankan      html  css  js  c++  java
  • MVC中从Controller像View层传值

            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>
    
            显示效果:


    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();
            }
    

            显示效果:


                   显示的效果如上,可是须要注意的是,由于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>
    
            显示效果:


    Model:

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

    在Controller中
    public ActionResult Index1()
            {
    
                MvcTest.Models.news news = new news();//实例化实体
                news.title = "社会新闻";
                news.content = "最热的新闻";
    			return View(news);
            }
    

    然后给Index1 加入视图


    在View中自己主动生成代码


    显示效果例如以下:


    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之间的传值是MVC比較重要的知识点。学习就是这样一个过程先知道一个东西然后再開始了解这个东西相关的知识,等熟悉了之后就開始跟我们学过的知识进行比較,一点一点的掌握。


  • 相关阅读:
    C#实现函数根据返回类型重载
    自己动手实现Expression翻译器 – Part Ⅱ
    ld编译链接时默认搜索路径
    出游
    常用网络命令(转贴)
    redhat6.3企业版安装oracle11g过程
    sqlserver2000版本识别
    考IQ的推断题-生日几何?
    Microsoft Visual Studio .NET 系统必备
    101~200之间的素数
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7233581.html
Copyright © 2011-2022 走看看