zoukankan      html  css  js  c++  java
  • MVC:Control与View传值

    MVC页面传值的方式主要有三种:

    第一种:

      采用ViewData。采用键值对的方式,ViewData存储的是一个object类型,传到view层需要强类型转换;使用起来类似于字典集合模式:
      ViewData["key"]="value"

    第二种:

      采用ViewBag。ViewBag是ViewData模式的一部分,采用模式也就是ViewBag.key=value.

    PS:

    1、关于ViewData和ViewBag对比如下

    ViewData与ViewBag对比:

    ViewData

    ViewBag

    它是Key/Value字典集合

    它是dynamic类型对像

    从Asp.net MVC 1 就有了

    ASP.NET MVC3 才有

    基于Asp.net 3.5 framework

    基于Asp.net 4.0与.net framework

    ViewData比ViewBag快

    ViewBag比ViewData慢

    在ViewPage中查询数据时需要转换合适的类型

    在ViewPage中查询数据时不需要类型转换

    有一些类型转换代码

    可读性更好

    2、关于ViewData和ViewBag的使用,举例如下:

    Control中一个action的代码:

     public ActionResult GetView()
            {
                Employee emp = new Employee();
                emp.FirstName = "Sukesh";
                emp.LastName = "Marla";
                emp.Salary = 2000;
                ViewData["Employee"] = emp;
                //ViewBag.empobj = emp; 
                return View("MyView");
            }

    该action对应的View代码如下:

    @{
        Layout = null;
    }
    @using MyMVC3Demo.Models
           
    <!DOCTYPE html>
    
    <html>
    <head>
        <title>MyView</title>
    </head>
    <body>
        <div>
            @{ 
                Employee emp = (Employee)ViewData["Employee"];                      
                }
            <b>Employee Details</b><br />
            Employee Name:@emp.FirstName @emp.LastName<br />
            Employee Salary:@emp.Salary.ToString("C")
        </div>
    </body>
    </html>

    注意:该地方引用了using命名空间,进行类型转换;

    3、使用情况:

    使用viewdata和viewbag可以实现数据的传值,但是针对数据类型的转换确实一个前后脱节的过程,简单的说,如果Control和View之间没有定义好Key和数据类型,那么数据转换的时候,可能就潜在出现问题,于是便有了第三种传值方式;

    第三种:

      强类型的view获取数据类型,实现代码如下:

      Control中某个Action代码如下:

     public ActionResult GetView()
            {
                Employee emp = new Employee();
                emp.FirstName = "Sukesh";
                emp.LastName = "Marla";
                emp.Salary = 2000;
                //ViewData["Employee"] = emp;
                //ViewBag.empobj = emp;
                return View("MyView",emp);
            }

    注意:返回View的时候需要将实体emp带到View中;

    view对应的代码如下:

    @using MyMVC3Demo.Models
    @model Employee
    @{
        Layout = null;
    }
    
           
    <!DOCTYPE html>
    <html>
    <head>
        <title>MyView</title>
    </head>
    <body>
        <div>
           
            <b>Employee Details3</b><br />
            Employee Name:@Model.FirstName @Model.LastName<br />
            Employee Salary:@Model.Salary.ToString("C")<br />
            @if (Model.Salary > 1500)
            { 
                <span style=" background-color:Yellow">EmplaySale</span>
            }
            else
            { 
                <span style="background-color:Green">SSL</span>
            }
        </div>
    </body>
    </html>

    注意:需要先声明@model ,该语句就是告知View要传递的数据类型,以便于数据的强类型转换。@Model就可以使用该页面接收到的实体数据了。

  • 相关阅读:
    initctl 创建自己的JOB
    TortoiseXX 与TotalCommander (TC)的图标问题
    eclipse 与 tomcat 的那些路径
    把函数视为对象
    序列增量赋值的一个谜题: +=
    __new__ 和 __init__ 的区别
    Python 中 is 与 == 区别
    Flask 2.0.1 changes
    flask run 与 DispatcherMiddleware 不兼容处理
    waitress 部署 flask服务
  • 原文地址:https://www.cnblogs.com/xibei666/p/4979186.html
Copyright © 2011-2022 走看看