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

How to conditionally set a model in asp.net MVC view?

我是 ASP.NET MVC 的初学者。
我的页面有一个名为 _Navigation 的局部视图,我正在重复使用它。
如果用户在"Home"页面,导航的<a>需要指向“#”字符,如果用户在"Services"页面,导航的href需要指向指向其他 url,比方说 "www.mysite.com"。它也会与此菜单中的其他链接一起出现。

我尝试执行以下操作

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

但是它说我只能有一个模型。
如何解决?

您的观点实际上是 class 派生自 WebViewPage<TModel> class。 @model语句定义了模型的类型(TModel)因为它是编译时语句,你不能在运行时间内改变它。

如果你需要两个不同的模型,你应该有两个不同的视图。

您可以尝试使用 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);