将字符串参数上的 MVC View Intellisense 警告获取到通用方法
Get MVC View Intellisense warning on string param to general method
Visual Studio 的 Intellisense 知道哪些视图文件可用。
如果我这样写(故意打字错误):
[HttpGet]
public ActionResult Create()
{
return View("Craete", new KeywordViewModel());
}
然后它会发牢骚,不划线说"can't resolve View"。
真可爱。
如果我想添加一个间接层,并通过另一个函数传入"Create":
[HttpGet]
public ActionResult Create()
{
return ArbitraryIndirection("Craete");
}
public ActionResult ArbitraryIndirection(string viewName)
{
return View(viewName, new KeywordViewModel());
}
然后我失去了这种行为。 Intellisense 不知道 ArbitraryIndirection
需要一个 View 目标,所以它不会检查。
这一点也不令人惊讶,但却是悲伤。
我可以教 Intellisense 更聪明吗?
是否有什么东西告诉 Intellisence 该参数是特殊的(我猜可能是 XML 评论参考或属性?)或者它是否被魔法硬编码到 Intellisence 的某个地方?
我可以在间接视图引用上进行写入时错误检查吗?
我已经有大约一年没有这样做了,但当时是 ReSharper 巧妙地为我验证了观点。
如果您使用的是 ReSharper,则可以在 JetBrains.Annotations
程序集中使用 [AspMvcView]
属性 - 您可以通过 Nuget 将其包含在内。相关指南出现在 jetbrains 网站上 link:
[AspMvcAction]
和 [AspMvcController]
属性的用法示例如下(请注意,您需要 [AspMvcView]
属性,但我手头没有代码可以使用它)
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;
}
希望对您有所帮助。
Visual Studio 的 Intellisense 知道哪些视图文件可用。
如果我这样写(故意打字错误):
[HttpGet]
public ActionResult Create()
{
return View("Craete", new KeywordViewModel());
}
然后它会发牢骚,不划线说"can't resolve View"。 真可爱。
如果我想添加一个间接层,并通过另一个函数传入"Create":
[HttpGet]
public ActionResult Create()
{
return ArbitraryIndirection("Craete");
}
public ActionResult ArbitraryIndirection(string viewName)
{
return View(viewName, new KeywordViewModel());
}
然后我失去了这种行为。 Intellisense 不知道 ArbitraryIndirection
需要一个 View 目标,所以它不会检查。
这一点也不令人惊讶,但却是悲伤。
我可以教 Intellisense 更聪明吗?
是否有什么东西告诉 Intellisence 该参数是特殊的(我猜可能是 XML 评论参考或属性?)或者它是否被魔法硬编码到 Intellisence 的某个地方?
我可以在间接视图引用上进行写入时错误检查吗?
我已经有大约一年没有这样做了,但当时是 ReSharper 巧妙地为我验证了观点。
如果您使用的是 ReSharper,则可以在 JetBrains.Annotations
程序集中使用 [AspMvcView]
属性 - 您可以通过 Nuget 将其包含在内。相关指南出现在 jetbrains 网站上 link:
[AspMvcAction]
和 [AspMvcController]
属性的用法示例如下(请注意,您需要 [AspMvcView]
属性,但我手头没有代码可以使用它)
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;
}
希望对您有所帮助。