Asp.Net MVC之ViewData字典与ViewModel模式

    当需要从Controller传递不止一个Model对象时,就要用到ViewData字典或ViewModel模式。例如,当我们需要Controller在View呈现Dinner对象和支持的Countries列表的时候,采用如下两种方式来实现。
    使用ViewData字典方式
    Controller中代码
    [Authorize]
    public ActionResult Edit(int id)
    {
        Dinner dinner = dinnerRepository.GetDinner(id);
        ViewData["Countries"] = new SelectList(PhoneValidator.AllCountries,dinner.Country);
        return View(dinner);
    }
    上面代码中SelectList构造函数的第一个参数显示国家列表,第二个参数指定当前选中的国家。    
    View中代码
    <% = Html.DropDownList("Country",ViewData["Countries"] as SelectList) %>
    上面代码中第一个参数表示输出的HTML表单元素名称,第二个参数是通过ViewData传递的模型类。
    使用ViewModel模式:
    ViewData的优点:非常快,容易实现
    ViewData的缺点:输入错误会导致错误;不能在编译期发现错误原因;在View视图模板中使用强类型时,ViewData要用as来转换。
    ViewModel模式:
    1.针对特定的View视图创建强类型的类
    2.公开View模板需要的动态参数值或内容
    3.Controller类填充和传递这些类给View模板去用
    4.优点:类型安全、编译期检查和编辑器的智能提示
    示例代码:
    public class DinnerFormViewModel
    {
           public Dinner Dinner {get; private set;}
           public SelectList Countries{get; private set;}
           public DinnerFormViewModel(Dinner dinner)
           {
                Dinner = dinner;
                Countries = new SelectList(PhoneValidator.Countries,dinner.Country);
           }

    }
    在Controller类中
    [Authorize]
    public ActionResult Edit(int id)
    {
        Dinner dinner = dinnerRepository.GetDinner(id);
        return View(new DinnerFormViewModel(dinner));
    }
    在View视图模板中
    头部Inherits = "System.Web.Mvc.ViewPage<NerdDinner.Models.Dinner>"改为
    Inherits = "System.Web.Mvc.ViewPage<NerdDinner.Controllers.DinnerFormViewModel>"
    绑定列表即为<% = Html.DropDownList("Country".Model.Countries) %>

转载于:https://www.cnblogs.com/jewleo/archive/2009/09/27/20090927_1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值