Asp.net mvc 将字符串参数上的MVC视图Intellisense警告获取到常规方法
VisualStudio的Intellisense知道哪些视图文件可用 如果我写这封信(故意打字): 然后它将发出呜呜声,而不是在它下面划下划线并说“无法解析视图”。 这很可爱 如果我想添加一层间接寻址,并通过另一个函数传入“Create”:Asp.net mvc 将字符串参数上的MVC视图Intellisense警告获取到常规方法,asp.net-mvc,visual-studio-2015,intellisense,Asp.net Mvc,Visual Studio 2015,Intellisense,VisualStudio的Intellisense知道哪些视图文件可用 如果我写这封信(故意打字): 然后它将发出呜呜声,而不是在它下面划下划线并说“无法解析视图”。 这很可爱 如果我想添加一层间接寻址,并通过另一个函数传入“Create”: [HttpGet] public ActionResult Create() { return ArbitraryIndirection("Craete"); } public ActionResu
[HttpGet]
public ActionResult Create()
{
return ArbitraryIndirection("Craete");
}
public ActionResult ArbitraryIndirection(string viewName)
{
return View(viewName, new KeywordViewModel());
}
然后我就失去了这种行为。Intellisense不知道,ArbiraryIndirection
需要一个视图目标,所以它不检查。
这一点也不奇怪,但令人难过
我能教智能感知变得更聪明吗
是否有什么东西告诉Intellisence参数是特殊的(我猜可能是一个XML注释引用,或者是一个属性?)
我可以对间接视图引用进行写时错误检查吗?我已经有一年没有这样做了,但当时是ReSharper为我巧妙地验证了视图 如果您使用的是ReSharper,则可以使用
JetBrains.Annotations
程序集中的[AspMvcView]
属性,您可以通过Nuget将其包括在内。jetbrains网站上的相关指南如下:
下面是[AspMvcAction]
和[AspMvcController]
属性的示例用法(请注意,您需要使用[AspMvcView]
属性,但我手头没有使用该属性的代码)
公共静态MvcHtmlString WidgetWrapperAction(此HtmlHelper html、[AspMvcAction]字符串操作、[AspMvcController]字符串控制器,对象参数)
{
var routeValueDictionary=新的routeValueDictionary(参数){{{“area”,“AreaName”};
var htmlString=html.Action(操作、控制器、routeValueDictionary);
if(string.IsNullOrWhiteSpace(htmlString.ToHtmlString()))
{
htmlString=html.Action(“WidgetLoadFailed”、“WidgetLoadFailed”、新RouteValueDictionary{{{“area”、“AreaName”});
}
返回htmlString;
}
希望这有帮助。看起来很完美。谢谢
[HttpGet]
public ActionResult Create()
{
return ArbitraryIndirection("Craete");
}
public ActionResult ArbitraryIndirection(string viewName)
{
return View(viewName, new KeywordViewModel());
}
public static MvcHtmlString WidgetWrapperAction(this HtmlHelper<dynamic> html, [AspMvcAction] string action, [AspMvcController] string controller, object parameters)
{
var routeValueDictionary = new RouteValueDictionary(parameters) { { "area", "AreaName" } };
var htmlString = html.Action(action, controller, routeValueDictionary);
if (string.IsNullOrWhiteSpace(htmlString.ToHtmlString()))
{
htmlString = html.Action("WidgetLoadFailed", "WidgetLoadFailed", new RouteValueDictionary { { "area", "AreaName" } });
}
return htmlString;
}