如何在 ASP.NET MVC 中控制局部视图的条件显示

Posted

技术标签:

【中文标题】如何在 ASP.NET MVC 中控制局部视图的条件显示【英文标题】:How to control conditional display of partial views in ASP.NET MVC 【发布时间】:2009-10-07 08:25:54 【问题描述】:

在我们的标准 Web 表单 ASP.NET 解决方案中,我们通常在母版页中有一系列用户控件,并确定它们是否显示在其背后的代码中。在 ASP.NET MVC 中实现相同目标的最佳方法是什么?

您显然可以将 if 语句放在母版页或部分视图中,但这让我觉得很混乱,并且违反了将业务逻辑排除在视图之外的原则。它还需要将必要的信息放入所有视图模型中,或者从基本控制器继承,这对于如此简单的事情似乎有很多麻烦。

我正在考虑使用 RenderAction 并返回一个完全空白的视图以防止任何输出 - 这是一个好的模式吗?

【问题讨论】:

【参考方案1】:

打破了业务逻辑不可见的原则

这不是业务逻辑。当您确定是否显示某些内容时,它是表示逻辑。放在那里没问题。

您可以决定是否显示某些内容并在模型中设置一些标志(例如,您可以制作 BaseModel 或 MasterModel)。然后您的主视图、部分视图本身或 html 助手将根据这些标志执行条件渲染。

关于关注点的清晰分离,是的,WebForms 看似可以做到,但它是对底层机制的巨大抽象。通常它会导致业务逻辑在代码隐藏中,也就是说,在表示层中业务逻辑属于不超过它属于视图。

【讨论】:

我第二个。收到一堆“RenderPartialIfNotNull("Foo", Model.Something)" 调用。 对不起,是的,我的意思是 UI 逻辑而不是业务逻辑【参考方案2】:

您可以通过创建我最近的帖子http://www.rajeeshcv.com/2010/01/asp-net-mvc-conditional-rendering-partial-views/ 中提到的 Html 扩展方法来避免混乱的“If”语句。

谢谢,

拉吉什

【讨论】:

以上是关于如何在 ASP.NET MVC 中控制局部视图的条件显示的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET MVC 中使用 Ajax 调用刷新局部视图?

在 ASP.NET MVC 中使用 jQuery 渲染局部视图

ASP.NET MVC 通用局部视图模式

如何将参数传递给 ASP.NET MVC 中的局部视图?

控制器中的 Asp.Net MVC 5 ModelState 具有索引、添加、编辑

模型在按钮单击 ASP.NET MVC 5 时为空