获取MVC查看字符串参数上的Intellisense警告到一般方法

时间:2017-01-09 18:29:50

标签: asp.net-mvc visual-studio-2015 intellisense

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中?

我是否可以对间接视图参考进行写入时错误检查?

1 个答案:

答案 0 :(得分:5)

我在大约一年内没有这样做过,但当时正是ReSharper巧妙地验证了我的观点。

如果您使用的是ReSharper,则可以使用[AspMvcView]程序集中的JetBrains.Annotations属性 - 您可以通过Nuget包含该属性。相关指南出现在jetbrains网站的这个链接上:

https://blog.jetbrains.com/dotnet/2011/12/07/providing-intellisense-navigation-and-more-for-custom-helpers-in-aspnet-mvc/

以下是[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;
    }

希望这有帮助。