如何在asp.net MVC视图中有条件地设置模型?

时间:2015-11-28 23:09:45

标签: c# asp.net-mvc model asp.net-mvc-partialview

我是ASP.NET MVC的初学者 我的页面有一个名为_Navigation的部分视图,我正在重复使用 如果用户在&#34; Home&#34;导航的<a>需要指向&#34;#&#34; char,如果用户在&#34;服务&#34;页面,导航的href需要指向其他网址,让我们说&#34; www.mysite.com&#34;。它也会出现在此菜单中的其他链接中。

我尝试了以下

@if (ViewContext.RouteData.Values.ContainsValue("Services"))
{
    @model MySite.Models.ServicesNavigation
}
else
{
    @model MySite.Models.HomeNavigation
}

但它说我只能有一个型号 怎么解决?

2 个答案:

答案 0 :(得分:4)

您可以尝试使用Interface

public interface INavigation
{
    //Your props here
}

public class ServicesNavigation : INavigation
{
}

public class HomeNavigation: INavigation
{
}

然后您的视图可以是INAVigation类型。

@model INavigation

根据您的条件在您的控制器中,您可以通过所需的INavigation

.......
INavigation model;
if(conditionOneIsMet)
{
    model = new ServicesNavigation();    
}
else
{
    model = new HomeNavigation();
}

return View(model);

答案 1 :(得分:1)

您的视图实际上是一个派生自WebViewPage<TModel>类的类。 @model语句定义模型的类型(TModel)因为它是编译时语句,所以您无法在运行时更改它。

如果您需要两种不同的型号,则应该有两种不同的视图。