Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET strong类型化控制器操作视图<;TView,TModel>;(TModel数据)_Asp.net Mvc_Controller_Action_Typing_Strongly Typed View - Fatal编程技术网

Asp.net mvc ASP.NET strong类型化控制器操作视图<;TView,TModel>;(TModel数据)

Asp.net mvc ASP.NET strong类型化控制器操作视图<;TView,TModel>;(TModel数据),asp.net-mvc,controller,action,typing,strongly-typed-view,Asp.net Mvc,Controller,Action,Typing,Strongly Typed View,我使用的是Asp.net MVC 1,我非常希望我的控制器操作使用StronglyTyped视图(数据)调用,这些调用在编译时强制执行类型检查,并且仍然允许我在默认视图引擎下使用aspx页面。我调用的ViewPages是强类型的,但在编译时无法捕获操作调用View(data)中的错误,因为内置的Controller View(data)方法不是强类型的,甚至在编译时也不检查页面是否存在 我已经使用实现了一个部分解决方案(下面的代码),但是(1)除非我为强类型视图创建代码,否则我无法让通用视图函数

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

我已经使用实现了一个部分解决方案(下面的代码),但是(1)除非我为强类型视图创建代码,否则我无法让通用视图函数识别强视图页面的类型,(2)Intellisense和重构不能正确使用此方法,这使我怀疑我使用的方法的可靠性

问题: 在从操作调用视图时,是否有更好的方法来实现类型强制

可选方法:是否有其他方法可以让我的操作方法创建viewpage实例,直接设置一些属性,然后将其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);
        }


    }
公共类strong控制器:控制器
{
受保护的ActionResult视图(TModel模型)
何处TView:ViewPage
其中TModel:class
{
返回视图(typeof(TView).Name,model);
}
}
下面是一个正在使用的控制器示例: 命名空间示例mvcapp.Controllers {

公共类HomeController:StrongController
{
公共行动结果索引()
{
返回视图(新的ExampleData());
}
}
}
类型识别需要查看页面代码隐藏。。。Aspx标题不起作用

namespace ExampleMVCApp.Views.Home
{
    public class Issue : System.Web.Mvc.ViewPage<ExampleData>
    {
    }

}
名称空间示例mvcapp.Views.Home
{
公共类问题:System.Web.Mvc.ViewPage
{
}
}

我认为你应该给这部电影一个旋转(原始公告之一)。这至少可以让您摆脱已有的代码,因为这些模板基于您已有的视图生成代码,并且您使用这些“伪”方法调用来处理视图


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

我不明白你为什么要这么做。您似乎正在修复一个不存在的问题。视图需要特定类型的数据,我希望框架能够实现这一点。也许我对此担心得太多了。但是我经常有其他人在查看页面上工作,这将使与他们的视图交互更容易。谢谢你的建议。我将检查这些,并报告它们是否适合我的情况。我花了几个小时玩T4和MVC futures html助手。T4很好,通常工作正常。然而,当我用奇怪的编译错误重构代码时,它生成的自动生成代码几次让我感到恶心,从博客上看,整个工具似乎很难维护。在MVC核心提供更好的内置方法之前,我将继续使用上面的方法和可能的一些lambda函数的组合。结论:我认为你的T4建议是一个非常有效的选择,我只会在保持简单和稳定方面犯错误。谢谢。谢谢你的反馈。由于我自己没有使用T4MVC帮助程序,您让我好奇它的视图帮助程序是否是强类型的,即开箱即用的。你能给我一些反馈吗?在一个视图中,我想答案基本上是肯定的,我没有太多的成功使用它来强烈地键入我的调用以从控制器渲染视图。我没有给它提供我所能拥有的最完整的测试集,因为当我改变我的数据类和视图来测试它时,我导致了大量的编译错误,这些错误必须手动清理,这足以阻止我使用它。此外,我也找不到任何其他人使用它作为我想要的无缝解决方案的明确例子,我希望微软明年可能会用更好的系统更新VisualStudio。我主要希望默认的aspx驱动的视图引擎得到彻底的改进,以便所有视图都得到完整的编译和类型检查。如果他们这样做了,那么对神奇字符串、匿名对象和代码自动生成工具的需求就消失了。
namespace ExampleMVCApp.Views.Home
{
    public class Issue : System.Web.Mvc.ViewPage<ExampleData>
    {
    }

}