【发布时间】:2009-08-24 08:18:49
【问题描述】:
我正在使用 Asp.net MVC 1,我真的希望我的控制器操作使用 StronglyTyped View(data) 调用,这些调用在编译时强制执行类型检查,并且仍然让我在默认视图引擎下使用 aspx 页面。我调用的 ViewPages 是强类型的,但是在编译时无法捕获操作调用 View(data) 中的错误,因为内置的控制器 View(data) 方法不是强类型的,甚至不检查查看如果页面在编译时存在。
我已经使用 this post 实现了部分解决方案(下面的代码),但是(1)我无法让通用视图函数识别强视图页面的类型,除非我为强类型视图创建代码, 和 (2) Intellisense 和重构不适用于这种方法,这让我怀疑我正在使用的方法的可靠性。
问题: 从操作调用视图时,是否有更好的方法来强制执行类型?
替代方案:是否有替代方法,我的操作方法可以创建视图页的实例,直接设置一些属性,然后将其 HTML 呈现给操作响应?
代码: 这是我所有控制器继承的基类,以实现我目前所拥有的:
public class StrongController : Controller
{
protected ActionResult View<TView, TModel>(TModel model)
where TView : ViewPage<TModel>
where TModel : class
{
return View(typeof(TView).Name, model);
}
}
下面是一个正在使用的控制器示例: 命名空间 ExampleMVCApp.Controllers {
public class HomeController : StrongController
{
public ActionResult Index()
{
return View<ExampleMVCApp.Views.Home.Index, ExampleData>(new ExampleData());
}
}
}
类型识别所需的 ViewPage 代码后面... Aspx 标头不起作用
namespace ExampleMVCApp.Views.Home
{
public class Issue : System.Web.Mvc.ViewPage<ExampleData>
{
}
}
【问题讨论】:
-
我不明白你为什么要这样做。您似乎正在解决一个不存在的问题。
-
视图需要特定类型的数据,我希望框架能够强制执行。
-
也许我有点太担心了。但是我经常让其他人在 ViewPages 上工作,这将使与他们的 Views 交互更容易。
标签: asp.net-mvc controller action typing strongly-typed-view