Visual Studio的智能感知知道哪些视图文件可用。
如果我写这个(故意错字):
[HttpGet]
public ActionResult Create()
{
return View("Craete", new KeywordViewModel());
}
然后它会发出呜呜声,而不是强调它并且说'#34;无法解析View"。 这很可爱。
如果我想添加一个间接层,并传递"创建"通过另一个功能:
[HttpGet]
public ActionResult Create()
{
return ArbitraryIndirection("Craete");
}
public ActionResult ArbitraryIndirection(string viewName)
{
return View(viewName, new KeywordViewModel());
}
然后我失去了这种行为。 Intellisense不会知道 ArbitraryIndirection
期待View目标,因此它不会检查。
这根本不是令人惊讶的,但它悲伤。
我可以教Intellisense更聪明吗?
是否有一些东西告诉Intellisence这个参数是特殊的(我猜一个XML注释引用,或者一个属性,也许?)或者它是否在某个地方被神奇地硬编码到Intellisence中?
我是否可以对间接视图参考进行写入时错误检查?
答案 0 :(得分:5)
我在大约一年内没有这样做过,但当时正是ReSharper巧妙地验证了我的观点。
如果您使用的是ReSharper,则可以使用[AspMvcView]
程序集中的JetBrains.Annotations
属性 - 您可以通过Nuget包含该属性。相关指南出现在jetbrains网站的这个链接上:
以下是[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;
}
希望这有帮助。