Controller与 View之间的值传递

ViewData相当于数据字典

   

            Employee emp = new Employee();

            emp.FirstName = "Sukesh";

            emp.LastName = "Marla";

            emp.Salary = 20000;


  ViewData["Employee"] = emp;
  return View("MyView");


@{

            Seven_days_to_learn_MVC.Models.Employee emp = (Seven_days_to_learn_MVC.Models.Employee) ViewData["Employee"];

        } 

        <b>Employee Detail</b>

        <br />

        Employee Name:@[email protected]<br />

        Employee Salary:@emp.Salary.ToString("C");

ViewBag

    ViewBag.Employee = emp;

   

    @{
        WebApplication1.Models.Employee emp = (WebApplication1.Models.Employee)
            ViewBag.Employee;
    }
    Employee Details
     
    Employee Name: @emp.FirstName @emp.LastName 
     
    Employee Salary: @emp.Salary.ToString("C")


ViewData与ViewBag的问题

ViewData和ViewBag 是Contoller与View之间值传递的内容。但是在实际使用的过程中,它们并不是最佳选择,接下来我们来看看使用它们的缺点:

 

性能问题;ViewData中的值都是对象类型,使用之前必须强制转换为合适的类型。会添加额外的性能负担。

没有类型安全就没有编译时错误,如果尝试将其转换为错误的类型,运行时会报错。良好的编程经验告诉我们,错误必须在编译时捕获。

数据发送和数据接收之间没有正确的连接;MVC中,Controller和View是松散的连接的。Controller是无法捕获View变化,View也无法捕获到Controller内部发生的变化。从Controller传递一个ViewData或ViewBag的值,当开发人员正在View中写入,就必须记录从Controller中即将获得什么值。如果Controller与View开发人员不是相同的开发人员,开发工作会变得非常困难。会导致许多运行时问题,降低了开发效率。



强类型View

   

1. 创建View的强类型

在View的顶部添加以下代码:

@model WebApplication1.Models.Employee

2. 显示数据

在View内部输入@Model.就会查看到Model类的属性


添加以下代码来显示数据:

  1:  Employee Details
  2:   
  3:  Employee Name : @Model.FirstName @Model.LastName 
  4:   
  5:  @if(Model.Salary>15000)
  6:  {
  7:  <span style="background-color:yellow">
  8:          Employee Salary: @Model.Salary.ToString("C")
  9:  </span>
 10:  }
 11:  else
 12:  {           
 13:  <span style="background-color:green">
 14:         
 15:          Employee Salary: @Model.Salary.ToString("C")
 16:  </span>
 17:  }

3. 从Controller Action方法中传递Model数据。

修改action代码

  1:  Employee emp = new Employee();
  2:  emp.FirstName = "Sukesh";
  3:  emp.LastName="Marla";
  4:  emp.Salary = 20000;           
  5:  return View("MyView",emp);

你可能感兴趣的:(Controller与,View之间的值传递)