随着我进一步构建我的 ASP.Net MVC 网站,我遇到了一些我想重构为更灵活的硬编码。
在我看来,我一直在传递一个如下所示的 MenuItemModel:
public class MenuItemModel {
public MenuItemModel(string aLinkName, string aArea
, string aController, string aAction) {
public string LinkName { get; private set; }
public string Area { get; private set; }
public string Controller { get; private set; }
public string Action { get; private set; }
public bool isActive { get; set; }
}
所以在视图中,我可以创建一个链接:
@Html.ActionLink( @Model.LinkName , @Model.Action
, @Model.Controller , new { Area = @Model.Area } , new { } )
这意味着我必须像这样创建一堆 MenuItemModel:
MenuItemModel MIM=new MenuItemModel("History","Transactions","History","Index");
这很好用,它创建了正确的链接。
但是我看到未来会出现一个大问题.. 这种策略对 Resharper 的重构能力没有弹性。当我们添加新功能时,我希望将来能够重新定义我的区域名称、控制器名称甚至动作名称。通过硬编码区域名称的文字“Transactions”,我现在必须手动重构整个网站以找到所有“Transactions”文字并在我们更改区域名称时将它们替换为其他内容;或将一个区域分成更小的区域,等等。呸。
如果我要实例化到 ActionResult 的链接,有没有办法从中获取控制器名称、区域和操作名称?那里有我不知道的助手吗?
一种方法是使用:
myController.GetType()
并检查类型属性并从类型中的“全名”中解析出区域和控制器名称,但我没有这种方法……它返回 ActionResult 的类型信息并且没有识别名称。
想法?