ASP.NET StrongTyped Controller-Action View <tview,tmodel>(TModel Data)</tview,tmodel>

时间:2009-08-24 08:18:50

标签: asp.net-mvc controller action typing strongly-typed-view

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

我使用 this post实现了部分解决方案(下面的代码),但是(1)我无法通过通用的View函数来识别强视图页面的类型,除非我为强大的后面创建一个代码类型视图,和(2)智能感知和重构不能正常使用这种方法,这让我怀疑我正在使用的方法的可靠性。

问题: 从动作调用视图时是否有更好的方法来获取类型?

备选方案还有另一种方法,我的操作方法可以创建视图页面的实例,直接设置一些属性,然后将其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);
        }


    }

以下是使用中的控制器示例:     namespace 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>
    {
    }

}

1 个答案:

答案 0 :(得分:0)

我认为你应该给T4MVC helpers一个旋转(原始公告之一here)。这至少可以让你摆脱已有的代码,因为这些模板根据你已有的视图生成代码,你使用这些“假”方法调用来解决你的观点。

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

相关问题