【发布时间】:2010-10-20 13:46:51
【问题描述】:
按照NerdDinners 示例,我有兴趣创建一个强类型母版页。为了实现这一点,我使用了一个基本控制器来检索母版页的数据。所有其他控制器都继承这个类。同样,我有ViewModels 用于母版页和任何其他视图。视图ViewModel 类继承自母版页的ViewModel。
问题
子控制器应如何确保将母版页的数据传递给视图而不设置与母版页本身相关的ViewModel 属性?
我的母版页将显示许多按钮,这些按钮在 XML 文件中确定,因此我要填充 Buttons 类。
MasterPage ViewModel 代码片段
using System.Collections.Generic;
namespace Site1.Models
{
public class MasterViewModel
{
public List<Button> Buttons{set; get;}
}
}
查看ViewModel
namespace Site1.Models
{
public class View1ViewModel : MasterViewModel
{
public SomeDataClass SomeData { get; set; }
}
}
基本控制器
using System.Collections.Generic;
using System.Web.Mvc;
using Site1.Models;
namespace Site1.Controllers
{
public abstract class BaseController : Controller
{
protected MasterViewModel model = new MasterViewModel();
public BaseController()
{
model.Buttons = new List<Button>();
//populate the button classes (doesn't matter how)
PopulateButtons(model.Buttons);
}
}
}
视图的控制器:
using System.Web.Mvc;
namespace Site1.Controllers
{
public class View1Controller : BaseController
{
public ActionResult Index()
{
Models.View1ViewModel viewModel = new Models.View1ViewModel();
SomeDataClass viewData = new SomeDataClass()
//populate data class (doesn't matter how)
PopulateDataClass(viewData);
viewModel.SomeData = viewData;
//I WANT TO ELIMINATE THE FOLLOWING LINE!
viewModel.Buttons = model.Buttons;
return View("Index", viewModel);
}
}
}
母版页继承System.Web.Mvc.ViewMasterPage<Site1.Models.MasterViewModel>。
视图继承System.Web.Mvc.ViewMasterPage<Site1.Models.View1ViewModel>。
【问题讨论】:
-
将无问题的解决方案移到它所属的已接受解决方案中。这清楚地分离了 Stack Overflow 使用的问题/答案模型。
标签: asp.net-mvc controller master-pages viewmodel