我正在开发一个MVC应用程序,我想知道在什么情况下最好使用强类型视图以及何时不需要... 我猜这更多是一个最佳实践问题。我正在开发一个电子商务应用程序,其中包含订单、产品等表格。引起我产生这个问题的部分是我正在为管理员添加新产品页面。如果您能提供关于如何判断何时使用强类型视图的提示,将是非常有帮助的。
我已经搜索了相关的问题,前3页没有任何结果,但如果您知道相关文章,请指导一下。
谢谢。
我已经搜索了相关的问题,前3页没有任何结果,但如果您知道相关文章,请指导一下。
谢谢。
public class MyBaseMasterPage : ViewMasterPage<MyBaseModel>
{
public string CurrentTheme
{
get
{
if (this.Model.CurrentUser != null)
return this.Model.CurrentUser.Theme;
else return this.Model.Config.DefaultTheme;
}
}
public User CurrentUser { get { return this.Model.CurrentUser; } }
public ConfigurationRepository Config { get { return this.Model.Config; } }
}
public class MyBaseModel
{
private MyBaseModel() { }
public MyBaseModel(MyBaseController controller)
{
this.CurrentUser = controller.CurrentUser;
this.Config = controller.Config;
}
public User CurrentUser { get; private set; }
public ConfigurationRepository Config { get; private set; }
}
public class LanLordzBaseController : Controller
{
[Obsolete]
protected new ViewResult View(string viewName, object model)
{
if (model == null)
{
throw new ArgumentNullException("model");
}
if (!(model is MyBaseModel))
{
throw new ArgumentException("The model you passed is not a valid model.", "model");
}
return base.View(viewName, model);
}
protected ViewResult View(string viewName, MyBaseModelmodel)
{
if (model == null)
{
throw new ArgumentNullException("model");
}
return base.View(viewName, (object)model);
}
public ConfigurationRepository Config { get { ... } }
public User CurrentUser { get { ... } }
}
如果涉及到数据,就应该使用强类型视图。没有讨论的余地。
每当我可以使用强类型视图时,我都会使用它,这样我就可以避免在视图中转换各种 ViewData 的属性。
每当我需要从多个来源获取信息以供视图使用时,我都会创建自己的强类型视图。
例如,在我的 Checkout 中,我需要一个订单,还需要用户的价格显示偏好设置;因此,我创建了一个名为 CheckoutViewModel 的类,该类具有 Order 和 PriceDisplay 两个属性。
希望这可以帮到你,
Dan
当您在视图中修改该类型的实例时,最好使用强类型视图。
例如,当您在视图中编辑或创建产品时,建议为产品类使用强类型视图。
如果您仅显示文本或图像而实际上没有与底层数据库层中的任何内容连接,则可能更容易不使用强类型视图。
随着您在MVC中的工作经验增加,这些都会变得自然而然。
虽然我在重复其他人已经表达得很好的观点,但我认为还有一个要提出的观点。视图是模型、视图、控制器概念的一部分,因此它的作用是以可视化的方式向用户呈现模型。鉴于它本质上是模型的表示,让它具有强类型是有意义的。
我只会使用ModelState或TempState来传递小块数据,例如来自添加、删除等活动的结果消息。每当我发现自己想使用State来传递与View类型无关的集合时,我就会将该功能重构为一个部分视图,并通过单独的控制器操作呈现它。
在我的代码中,相关类型通常从基础类型按层次结构引用到View强类型的基础类型,因此在必要时可以在View中访问它们。