2014-02-18 50 views
0

我使用显示如下控制器和动作名称在我的使用次数,面包屑如何更改控制器和动作显示名称在Asp.net MVC

@ViewContext.RouteData.Values["Controller"]/@ViewContext.RouteData.Values["Action"] 

这个查询的输出是

HrMapPersonCertificate/Create 

但我想为控制器显示不同的名称。 IE:认证/新证书

我可以更改操作和控制器的显示名称吗?

EDITED

其实我有一些麻烦,您的解决方案。我做了你所说的,但即。在我的Person模型中,现在它有两个变量,route1和route2。 Route1 =“个人信息”,Route2 =“操作名称:查看人员”。但是,在editind或使用此模型插入时,我也使用相同的视图。我有麻烦了。

回答

1

您不应该使用控制器和操作的内部名称在网站上显示路由。这会使事情的视图维护和定制变得困难(正如您可以看到的这个问题),并且不恰当地将服务器端的元数据与演示级别混合在一起。

一个更好的方法是创建一个BaseModel对象总是包含要在你的路线显示值:

public class BaseModel 
{ 
    public string Route1 {get; set;} 
    public string Route2 {get; set;} 
} 

的设置可以明显改变 - 你可以使用不同的名称,甚至是List<string>要存储两个以上的名称,但这个想法是不要将控制器和动作名称硬编码到视图中。

然后使用将此模型传递给每个视图并使用这些值显示您的路线。

@model BaseModel 
... 
@Model.Route1/@Model.Route2 

您传递到使用此布局应该从BaseModel继承网站上的每一个查看每一个模型。因此这些属性将可用于每个视图。因此,如果您在给定页面上的当前模型被称为MyModel,只需将其定义更改为​​,然后即可使用BaseModel属性。

+0

但我无法在视图中传递2个模型。我在每个视图中都使用这个基类。做这个的最好方式是什么 ? ViewModel? – umki

+0

为什么你不能将模型传递给你的视图?你可以阅读这篇文章[这篇博客文章](http://weblogs.asp.net/scottgu/archive/2010/10/19/asp-net-mvc-3-new-model-directive-support-in -razor.aspx)。 –

+0

不,我说只能有一个模型通过我的观点 – umki

相关问题