1)ViewBag
 
    ViewBag是动态类型,使用时直接添加属性赋值即可 ViewBag.myName
    控制器代码:
      
- 
 
public ActionResult Index()
 
 
- 
 
 
- 
 
 
- 
 
ViewBag.message = "欢迎使用MVC设计模式~~";
 
 
- 
 
 
- 
 
 
           
    视图代码:
 
      
- 
 
 
- 
 
<!--利用HtmlHelper创建TextBox时,使用名称与ViewBag中的Key一致, 就会自动实现值绑定-->
 
 
- 
 
 
- 
 
 
- 
 
 
       
    效果显示:
 
      
 
        2)ViewData
 
     ViewData只对当前Action有效,它是一个字典集合,通过key值读取对应的value;
     控制器代码:
  
- 
 
public ActionResult Index()
 
 
- 
 
 
- 
 
ViewData["name"] = "周江霄";
 
 
- 
 
ViewData["message"] = "欢迎使用MVC设计模式~~";
 
 
- 
 
 
- 
 
 
     
      视图代码:
 
  
- 
 
 
- 
 
<!--利用HtmlHelper创建TextBox时,使用名称与ViewData中的Key一致, 就会自动实现值绑定-->
 
 
- 
 
 
- 
 
 
- 
 
 
           
         效果显示:
 
  
 
  3)TempData
 
    使用TempData和使用ViewData方法是一样的,但是它可用于在不同的Action之间传值,这是ViewData做不到的。
   控制器代码:
   
- 
 
public class MVCController : Controller
 
 
- 
 
 
- 
 
public ActionResult Index1()
 
 
- 
 
 
- 
 
TempData["name"] = "周江霄"; 
 
 
- 
 
 
- 
 
 
- 
 
 
 
- 
 
public ActionResult Index2()
 
 
- 
 
 
- 
 
string strName = TempData["name"].ToString()
 
 
- 
 
 
- 
 
 
      
    上面的代码中,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的属性值: 
- 
 
 
- 
 
                <span class="editor-label">
 
 
- 
 
 
- 
 
 
- 
 
                <span class="editor-field">
 
 
- 
 
                    @Html.EditorFor(a => a.AdministratorID)
 
 
- 
 
                    @Html.ValidationMessageFor(model => model.AdministratorID)
 
 
- 
 
 
- 
 
 
- 
 
 
 
- 
 
 
- 
 
                <span class="editor-label">
 
 
- 
 
 
- 
 
 
- 
 
                <span class="editor-field">
 
 
- 
 
                    @Html.EditorFor(a => a.AdminPassword )
 
 
- 
 
 
- 
 
 
- 
 
 
 
- 
 
 
- 
 
                <span class="editor-label">
 
 
- 
 
 
- 
 
 
- 
 
                <span class="editor-field">
 
 
- 
 
                    @Html.EditorFor(a => a.AdminName )
 
 
- 
 
 
- 
 
 
 
        总结:关于View和Controller的传值学习,最开始接触到的是通过Model传值,感觉很方便,而对TempData、ViewData和ViewBag都不太了解,通过学习的逐步深入,才慢慢的对后三个有了进一步的认识。这又让我想起了米老师的“吃饭理论”,对什么新知识新事物的认识都要经历一个从陌生到熟悉的过程,然而如果你能够把它们和已有的知识或认识的实物联系起来,无疑会加快你探索的进程,也会是你新的探索更加轻松。