zoukankan      html  css  js  c++  java
  • 【MVC】View与Control之间数据传递

    1、 Controller向View传递数据

    • 使用ViewData传递数据【弱类型,字典型ViewDataDictionary】

      ViewData[“Message_ViewData”] = “ Hello ViewData!”;

      在View中读取Controller中定义的ViewData数据,代码如下:

      @Html.Encode(ViewData["Message_ViewData"])

    •  使用ViewBag传递数据  【动态型,dynamic】

      我们在Controller中定义如下:ViewBag.Message_ViewBag =  “ Hello ViewBag !”;

    •  使用TempData传递数据 【弱类型,临时存储,一次性获取就没了,实际上保存在Session中】

      我们在Controller中定义如下:TempData[“Message”] = “Hello word!”;

    •  使用Model传递数据 【强类型】

      创建强类型的View以后,View的第一行代码如下所示:@model Test.Models.HelloModel 

      就代表了这个View使用的Model为“Test.Models.HelloModel”

      然后在View中读取Model中定义的数据,代码如下:@Html.Encode(Model.Name)

     2、View向Controller传递数据

      主要通过 发送表单的方式来实现。具体的方式有:

    • 通过Request.Form读取表单数据【post】
    @using (Html.BeginForm("HelloModelTest", "Home", FormMethod.Post)) 
    
    { 
    
        @Html.TextBox("Name"); 
    
        @Html.TextBox("Text"); 
    
        <input type="submit" value="提交" /> 
    
     }

      控制器中

    [HttpPost] 
    
           public ActionResult HelloModelTest() 
    
           { 
    
               string name= Request.Form["Name"]; 
    
               string text= Request.Form["Text"]; 
    
               return View(); 
    
           }

      或者

    [HttpPost] 
    
            public ActionResult HelloModelTest(FormCollection fc) 
    
            { 
    
                string name= fc["Name"]; 
    
                string text  = fc["Text"]; 
    
                return View(); 
    
            }
    • 模型绑定
    @*为了下面的submit可以post提交到eidt*@
    @using (Html.BeginForm("Edit", "TestMovie", FormMethod.Post))
    {
        //为了防止“过多发布”攻击,请启用要绑定到的特定属性,控制器中加特性[ValidateAntiForgeryToken]
        @Html.AntiForgeryToken()
        <div>
            <input type="submit" value="保存" class="btn btn-default" />
        </div>
    }
    
    也可以
    @using (Html.BeginForm())
    {
        <input type="submit" value="删除" class="btn btn-default" />
    }

      控制器中

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include = "ID,Title,Director,Date")] MovieDB movieDB)
    
    或者 public ActionResult Edit(MovieDB movieDB) //这个默认的模型绑定
            {
                if (ModelState.IsValid)
                {
                    db.Entry(movieDB).State = EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                return View(movieDB);
            }

      当你的Action方法是以一个模型对象充当参数时,MVC运行时将会用模型绑定来构建该参数。

    默认用于模型绑定的是 DefaultModelBinder,以上述的HelloModel为例,DefaultModelBinder将会检索出所有可用的HelloModel属性用于绑定模型。

    根据命名约定,DefaultModelBinder能够自动地在请求中获取相应的值来填充HelloModel对象(它还能创建一个对象的实例来填充)

    换句话说:假设HelloModel有一个Name属性,那么模型绑定就会在请求中查找名为Name的参数。注意我说的是在“请求中”,而不是“表单集合”中。

    模型绑定会在请求中的各个方面进行值查找,这里面包括路由数据,查询字符串,表单集合。有必要的话你还可以添加自定义的值提供信息。

    模型绑定不并局限于Http Post及复杂参数(如HelloModel),你完全可以传入一个原始的简单参数:

    public ActionResult HelloModelTest( string name,string text) 

       // ….

    在该场景中,模型绑定将会在请求中查找名。

  • 相关阅读:
    c读取文本文档
    java类中定义接口
    android selector
    android listview
    android继承Dialog实现自定义对话框
    移植net-snmp到开发板(mini210)
    [BZOJ1901]Zju2112 Dynamic Rankings
    [BZOJ3524][Poi2014]Couriers
    [codeforces722D]Generating Sets
    [codeforces722C]Destroying Array
  • 原文地址:https://www.cnblogs.com/peterYong/p/10693264.html
Copyright © 2011-2022 走看看