如何在 MVC 中导航基于字符串的方法名称?

use*_*eve 0 c# asp.net-mvc

我不知道如何最好地描述这一点,但我们开始吧。

在大多数情况下,Visual Studio 非常擅长帮助您浏览代码。例如,如果我看到这样的不熟悉的行,CRM.UpdateAdminAccounts(model.Email)我可以将鼠标悬停在对象/方法名称上以发现它们实际上是什么,或者右键单击并选择Go To Definition直接跳转到生成类、属性或其他内容的代码。

这是可能的,因为代码是强类型的,并且编译器在幕后为所有内容分配符号,使 VS 可以轻松准确地知道文本引用的内容,并在需要时跳转到它或找出它在其他地方引用的地方。

MVC 中的许多代码行的情况并非如此,其中方法名称被称为字符串文字。例如 return RedirectToAction("Index", "Home") 或在视图中:@Url.Action("Delete", new { id = item.ID })

如果我想直接跳到IndexorDelete操作代码,如果没有很多中间步骤,我就无法做到这一点。更糟糕的是,该操作可能不存在,或者可能存在直到运行时才发现的拼写错误。

我是唯一一个觉得这是一个巨大的倒退并且可以通过使用反射轻松改进的人吗?

我的问题很简单,是否应该使用任何工具或技巧来使这种事情成为可能并且更易于使用?

Kit*_*Kit 5

最好的办法是为方法使用与操作名称匹配的简单名称,然后nameof()在字符串参数中使用重定向。

public class CustomerController : Controller
{
    public ActionResult Details(int? id)
    {
        if (!id.HasValue)
            return RedirectToAction(nameof(Index));

        return View();
    }

    public ActionResult Index()
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

代码源自ASP.NET MVC 控制器概述 (C#)并稍加修改。

这样,您可以将鼠标悬停/单击/跟随参考部分Indexnameof(Index)VS 会将光标跳转到该Index()方法。

如果由于某种原因您被迫通过使方法名称变得更复杂(例如,如果您有IndexOne()和)来消除方法名称的歧义,则这不能完美地工作。IndexTwo()

实际上,唯一的其他选择是尝试找到一个可以解析代码并跳转到参考的 VS 扩展。