Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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
C# 从控制器在MVC强类型视图上强制执行所需参数?_C#_Asp.net Mvc - Fatal编程技术网

C# 从控制器在MVC强类型视图上强制执行所需参数?

C# 从控制器在MVC强类型视图上强制执行所需参数?,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个控制器,我想把一些数据传递给一个视图 视图的强类型如下所示: System.Web.Mvc.ViewPage<SomeObject> 我希望它强制我需要传入“someObject” 我希望下面的失败而不编译: View("SomeAction"); 无论发生什么情况,预期的对象必须始终传递给视图 这是可能的还是我完全偏离了基准?我只需要为这种情况编写一个测试,而不必为其他情况费心: var actual = controllerUnderTest.Action() as

我有一个控制器,我想把一些数据传递给一个视图

视图的强类型如下所示:

System.Web.Mvc.ViewPage<SomeObject>
我希望它强制我需要传入“someObject”

我希望下面的失败而不编译:

View("SomeAction");
无论发生什么情况,预期的对象必须始终传递给视图


这是可能的还是我完全偏离了基准?

我只需要为这种情况编写一个测试,而不必为其他情况费心:

var actual = controllerUnderTest.Action() as ViewResult;
Assert.IsNotNull(actual.ViewData.Model);
Assert.IsInstanceOfType(actual.ViewData.Model, typeof(SomeObject));

我更希望编译器拿起它,甚至可能是intellisense来帮助其他人,而不是等待测试用例运行来发现错误。这就是我试图从这个问题中得到的要点。只要您的控制器是从System.Web.Mvc.controller派生的,就没有任何东西(在编译时)可以阻止开发人员调用controller.View(“abc”)方法而不传递模型。您可以改为让操作返回CustomViewResult而不是ActionResult。此CustomViewResult可以从ViewResult派生,并在您定义的公共构造函数中“强制”模型。
var actual = controllerUnderTest.Action() as ViewResult;
Assert.IsNotNull(actual.ViewData.Model);
Assert.IsInstanceOfType(actual.ViewData.Model, typeof(SomeObject));