NET 中controller 向View 传值

来源:互联网 发布:linux 逻辑分区创建 编辑:程序博客网 时间:2024/06/18 01:41

Controller向View传值主要有四种途径

  1. ViewBag
    ViewBag是动态类型,使用时直接添加属性赋值即可 ViewBag.myName
    控制器中:

    public ActionResult Index()  {      ViewBag.name = "liming";      ViewBag.message = "欢迎!";      return View();  }
    视图中:
        <div>                  <!--利用HtmlHelper创建TextBox时,使用名称与ViewBag中的Key一致, 就会自动实现值绑定-->          @Html.TextBox("name")          @ViewBag.message              </div> 
  2. ViewData
    ViewData只对当前Action有效,它是一个字典集合,通过key值读取对应的value;
    控制器中:

    public ActionResult Index()  {       ViewData["name"] = "周江霄";       ViewData["message"] = "欢迎使用MVC设计模式~~";       return View();   }    
    视图中:
        <div>                  <!--利用HtmlHelper创建TextBox时,使用名称与ViewData中的Key一致, 就会自动实现值绑定-->          @Html.TextBox("name")          @ViewData["message"]              </div> 
  3. TempData
    使用TempData和使用ViewData方法是一样的,但是它可用于在不同的Action之间传值,这是ViewData做不到的。
    控制器中:

    public class MVCController : Controller  {         public ActionResult Index1()      {          TempData["name"] = "周江霄";                      return View();      }      public ActionResult Index2()      {          string strName = TempData["name"].ToString()          return View();      }    }
    上面的代码中,Index()给TempData添加了一个键值对,假设我们先请求Index这个Action,接着请求Index2这个Action,那么在Index2中,我们便可以得到之前添加到TempData的键值对。有趣的是,这时如果再次请求Index2,那么从TempData中读到的MyName的值会是null。这是因为TempData和一个临时的Session差不多,当Acion执行的时候它做为一个全局对象保存的内存中,而一旦Action的执行完成,就会释放内存空间,这就是它与ViewData最大的不同之处。
  4. model
    Controller通过Model传值应该是MVC中使用最为普遍的一种传值方式,通过强类型绑定,在View中可以很方便的通过Model的相应属性得到想要的值。

    Model代码:

        public partial class YzAdministratorEntity      {          public YzAdministratorEntity()          {              this.YzClearRecordEntity = new HashSet<YzClearRecordEntity>();              this.YzNotifyInfoEntity = new HashSet<YzNotifyInfoEntity>();          }            public System.Guid ID { get; set; }          public string AdminPassword { get; set; }          public string AdminName { get; set; }          public bool isUsed { get; set; }          [Required(AllowEmptyStrings = false, ErrorMessage = "用户ID不能为空")]          public string AdministratorID { get; set; }          public string AdminLevel { get; set; }          public virtual ICollection<YzClearRecordEntity> YzClearRecordEntity { get; set; }          public virtual ICollection<YzNotifyInfoEntity> YzNotifyInfoEntity { get; set; }      } 

    视图代码:
    强类型绑定:

    @model Model.YzAdministratorEntity  

    通过Linq自动匹配Model和Label或TxtBox的属性值:

        <div>              <span class="editor-label">                  @Html.Label("编号:")              </span>              <span class="editor-field">                  @Html.EditorFor(a => a.AdministratorID)                  @Html.ValidationMessageFor(model => model.AdministratorID)              </span>          </div>          <div>              <span class="editor-label">                  @Html.Label("密码:")              </span>              <span class="editor-field">                  @Html.EditorFor(a => a.AdminPassword )              </span>          </div>          <div>              <span class="editor-label">                  @Html.Label("真实姓名:")              </span>              <span class="editor-field">                  @Html.EditorFor(a => a.AdminName )              </span>         </div> 
0 0