0

我正在使用 Asp.net MVC 1,我真的希望我的控制器操作使用 StronglyTyped View(data) 调用,这些调用在编译时强制进行类型检查,并且仍然让我在默认视图引擎下使用 aspx 页面。我调用的 ViewPages 是强类型的,但是在编译时无法捕获操作调用 View(data) 中的错误,因为内置的控制器 View(data) 方法不是强类型的,甚至不检查查看如果页面在编译时存在。

我已经使用这篇文章实现了部分解决方案(下面的代码),但是(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>
    {
    }

}
4

1 回答 1

0

我认为你应该给T4MVC 助手一个旋转(这里的原始公告之一)。这至少可以让您摆脱已有的代码,因为这些模板会根据您已有的视图生成代码,并且您使用这些“假”方法调用来处理您的视图。

为了让您的调用为View您的视图声明的特定模型进行强类型化,我不确定这些助手是否可以帮助您(尽管我怀疑他们会这样做)。但是,如果他们不这样做,您仍然可以自行破解 T4MVC 代码,或者与原作者David Ebbo 联系,以建议添加该功能。

于 2009-08-24T08:56:06.897 回答