zoukankan      html  css  js  c++  java
  • Asp.net MVC中的ViewData与ViewBag

    在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下: 
    
    
    
    在Controller中使用ViewData:
    
    public ActionResult UsingViewData()
    {
        
        ViewData["Title"] = " Using ViewData";
        ViewData["ProjectName"] = "My Test Project";
        ViewData["ProjectDescription"] = "This is Test Project to demo Viewdata and viewbag details";
        ViewData["StartDate"] = new DateTime(2011, 1, 1);
        ViewData["TotalPrice"] = 1000;
        ViewData["TotalDays"] = 100;
        Dictionary<string, string> stackholder = new Dictionary<string, string>();
        stackholder.Add("Client","Mr.  Client");
        stackholder.Add("Manager","Mr. Joy");
        stackholder.Add("Team Leader","Mr.Toy");
        stackholder.Add("Sr. developer", "Mr.dojoy");
        stackholder.Add("developer", "Mr. nodoy");
        ViewData["stackholder"] = stackholder;
    
        List<string> modules = new List<string>();
        modules.Add("Admin module");
        modules.Add("ShoppingCart module");
        modules.Add("CMS module");
        ViewData["modules"] = modules;
        return View();
    }
    
    对应UsingViewData View的cshtml:
    
    <h1>@ViewData["Title"]</h1>
     <div>
       <div>
        <h2>Project Name : @ViewData["ProjectName"]</h2>
       </div>
       <div>
         ProjectDescription :   
         <p>"@ViewData["ProjectDescription"]".</p>
       </div>
       <div>
          Stack Holder :
          <br />
    
          <ul id="stakholder">
          @foreach ( var stakerholder in ViewData["stackholder"] as Dictionary<string, string> )
          {          
        <li>
            @stakerholder.Key   : @stakerholder.Value
        </li>
          }
         </ul>
       </div>
       <div>
         Project Details:<br />
         <div>
           module List  :
           <ul id="modulelist">
          @foreach ( var module in ViewData["modules"] as List<string> )
          {          
        <li>
            @module
        </li>
          }
         </ul>
            
         </div>
         Project StartDate : @ViewData["StartDate"]  <br />
         Project TotalPrice: @ViewData["TotalPrice"] <br />
         Project TotaDays  : @ViewData["TotalDays"] 
       </div>
     </div>
    
    然后是ViewBag:
    
    public ActionResult UsingViewBag()
    {
    
        ViewBag.Title = " Using ViewBag";
        ViewBag.ProjectName = "My Test Project";
        ViewBag.ProjectDescription = "This is Test Project to demo Viewdata and viewbag details";
        ViewBag.StartDate = new DateTime(2011, 1, 1);
        ViewBag.TotalPrice = 1000;
        ViewBag.TotalDays = 100;
        Dictionary<string, string> stackholder = new Dictionary<string, string>();
        stackholder.Add("Client", "Mr.  Client");
        stackholder.Add("Manager", "Mr. Joy");
        stackholder.Add("Team Leader", "Mr.Toy");
        stackholder.Add("Sr. developer", "Mr.dojoy");
        stackholder.Add("developer", "Mr. nodoy");
        ViewBag.stackholder = stackholder;
    
        List<string> modules = new List<string>();
        modules.Add("Admin module");
        modules.Add("ShoppingCart module");
        modules.Add("CMS module");
        ViewBag.modules = modules;
        return View();
    }
    
    对应View UsingViewBag 的cshtml的ViewBag:
    
    <h1>@ViewBag.Title</h1>
     <div>
       <div>
        <h2>Project Name : @ViewBag.ProjectName</h2>
       </div>
       <div>
         ProjectDescription :   
         <p>"@ViewBag.ProjectDescription.</p>
       </div>
       <div>
          Stack Holder :
          <br />
    
          <ul id="stakholder">
          @foreach ( var stakerholder in ViewBag.stackholder )
          {          
        <li>
            @stakerholder.Key   : @stakerholder.Value
        </li>
          }
         </ul>
       </div>
       <div>
         Project Details:<br />
         <div>
           module List  :
           <ul id="modulelist">
          @foreach ( var module in ViewBag.modules )
          {          
        <li>
            @module
        </li>
          }
         </ul>
            
         </div>
         Project StartDate : @ViewBag.StartDate.ToString("dd-MMM-yyyy") <br />
         Project TotalPrice: @ViewBag.TotalPrice  ₹  <br />
         Project TotaDays  : @ViewBag.TotalDays 
       </div>
     </div>
    
    后面是在Controller中使用ViewBag:
    
    public ActionResult UsingViewBagInControlAndViewDataInView()
    {
    
        ViewBag.Title = " Using ViewBag In Control And ViewData In View";
        ViewBag.ProjectName = "My Test Project";
        ViewBag.ProjectDescription = "This is Test Project to demo Viewdata and viewbag details";
        ViewBag.StartDate = new DateTime(2011, 1, 1);
        ViewBag.TotalPrice = 1000;
        ViewBag.TotalDays = 100;
        Dictionary<string, string> stackholder = new Dictionary<string, string>();
        stackholder.Add("Client", "Mr.  Client");
        stackholder.Add("Manager", "Mr. Joy");
        stackholder.Add("Team Leader", "Mr.Toy");
        stackholder.Add("Sr. developer", "Mr.dojoy");
        stackholder.Add("developer", "Mr. nodoy");
        ViewBag.stackholder = stackholder;
    
        List<string> modules = new List<string>();
        modules.Add("Admin module");
        modules.Add("ShoppingCart module");
        modules.Add("CMS module");
        ViewBag.modules = modules;
        return View();
    }
    
    在UsingViewBagInControlAndViewDataInView.cshtml中使用ViewData来取值:
    
    <h1>@ViewData["Title"]</h1>
     <div>
       <div>
        <h2>Project Name : @ViewData["ProjectName"]</h2>
       </div>
       <div>
         ProjectDescription :   
         <p>"@ViewData["ProjectDescription"]".</p>
       </div>
       <div>
          Stack Holder :
          <br />
    
          <ul id="stakholder">
          @foreach ( var stakerholder in ViewData["stackholder"] as Dictionary<string, string> )
          {          
        <li>
            @stakerholder.Key   : @stakerholder.Value
        </li>
          }
         </ul>
       </div>
       <div>
         Project Details:<br />
         <div>
           module List  :
           <ul id="modulelist">
          @foreach ( var module in ViewData["modules"] as List<string> )
          {          
        <li>
            @module
        </li>
          }
         </ul>
            
         </div>
         Project StartDate : @ViewData["StartDate"]  <br />
         Project TotalPrice: @ViewData["TotalPrice"] <br />
         Project TotaDays  : @ViewData["TotalDays"] 
       </div>
     </div>
    
    反过来是这样的: 
    
    public ActionResult UsingViewDataInControlAndViewBagInView()
    {
        ViewData["Title"] = " Using ViewData In Control And ViewBag In View";
        ViewData["ProjectName"] = "My Test Project";
        ViewData["ProjectDescription"] = "This is Test Project to demo Viewdata and viewbag details";
        ViewData["StartDate"] = new DateTime(2011, 1, 1);
        ViewData["TotalPrice"] = 1000;
        ViewData["TotalDays"] = 100;
        Dictionary<string, string> stackholder = new Dictionary<string, string>();
        stackholder.Add("Client", "Mr.  Client");
        stackholder.Add("Manager", "Mr. Joy");
        stackholder.Add("Team Leader", "Mr.Toy");
        stackholder.Add("Sr. developer", "Mr.dojoy");
        stackholder.Add("developer", "Mr. nodoy");
        ViewData["stackholder"] = stackholder;
    
        List<string> modules = new List<string>();
        modules.Add("Admin module");
        modules.Add("ShoppingCart module");
        modules.Add("CMS module");
        ViewData["modules"] = modules;
        return View();
    }
    
    在UsingViewDataInControlAndViewBagInView.cshtml 的View中使用ViewBag来取值:
    
    <h1>@ViewBag.Title</h1>
     <div>
       <div>
        <h2>Project Name : @ViewBag.ProjectName</h2>
       </div>
       <div>
         ProjectDescription :   
         <p>"@ViewBag.ProjectDescription.</p>
       </div>
       <div>
          Stack Holder :
          <br />
    
          <ul id="stakholder">
          @foreach ( var stakerholder in ViewBag.stackholder )
          {          
        <li>
            @stakerholder.Key   : @stakerholder.Value
        </li>
          }
         </ul>
       </div>
       <div>
         Project Details:<br />
         <div>
           module List  :
           <ul id="modulelist">
          @foreach ( var module in ViewBag.modules )
          {          
        <li>
            @module
        </li>
          }
         </ul>
            
         </div>
         Project StartDate : @ViewBag.StartDate.ToString("dd-MMM-yyyy") <br />
         Project TotalPrice: @ViewBag.TotalPrice  ₹  <br />
         Project TotaDays  : @ViewBag.TotalDays 
       </div>
     </div>
    
    这样对比看上去会比较清楚一些。在源代码中的ViewBag是这样的属性:
    
    public dynamic ViewBag {
        get {
            if (_dynamicViewData == null) {
                _dynamicViewData = new DynamicViewDataDictionary(() => ViewData);
            }
            return _dynamicViewData;
        }
    }
    ViewData是:
    
    public ViewDataDictionary ViewData {
        get {
            if (_viewData == null) {
                SetViewData(new ViewDataDictionary());
            }
            return _viewData;
        }
        set {
            SetViewData(value);
        }
    }
    具体细节在这儿不深入了,这里只是抛砖引玉。希望对您Asp.net MVC开发有帮助。
    

      

  • 相关阅读:
    guxh的python笔记一:数据类型
    guxh的python笔记三:装饰器
    guxh的python笔记十:包和模块
    guxh的python笔记六:类的属性
    guxh的python笔记四:迭代
    流畅的python笔记
    spring面试大全
    Spring面试问答
    Hibernate的10个常见面试问题及答案
    reflect 机制
  • 原文地址:https://www.cnblogs.com/seanjack/p/6291973.html
Copyright © 2011-2022 走看看