2011-09-01 81 views
1

asp:PlaceHolders有一个可见的属性,它控制着他们的内容是否在页面上呈现。ASP.NET MVC2主页面PlaceHolder的可见性

我已经在MVC2母版页中声明了一个PlaceHolder,并将它的可见性设置为false。

请你能告诉我如何从一个MVC2母版页继承的MVC2视图模板中控制PlaceHolder的可见性吗?

这似乎是一个简单的任务,但我很难看到它是如何实现的。我认为我应该能够从降序视图模板(如使用网页表单代码隐藏)访问PlaceHolder,并将其设置为可见性,但这样做的方式正在逃避我...

回答

3

Don不要这样做。占位符来自传统WebForms。在ASP.NET MVC应用程序中操作服务器端控件是非常糟糕的,你永远不应该这样做。因此,简单地忘记在用户控件上设置属性。幸运的是,Razor占位符已被完全删除,并被部分替换。因此,不要编写以后无法迁移的代码。

在ASP.NET MVC应用程序中显示/隐藏部分代码的一种方法是在视图中使用if语句。例如:

<% if (Model.ShouldShowSection) { %> 
    <div>Some super section</div> 
<% } %> 

在这个例子中,我们在视图模型中测试一个布尔值,它即呈现该视图将设置控制器动作。

+0

感谢您的回答。不幸的是,访问模型(或ViewData)在主页面中不可用(并且我想评估主页面中的条件以保持干燥)。我们也不使用剃刀(也许我们应该)。在我看来,主页面应该能够具有条件元素 - 是否有另一种方法来实现这一目标? – lukkea

+0

@lukkea,你可以有一个基本视图模型,并强烈地输入你的母版页。这个基础视图模型类将包含必要的属性。取决于这个可见性条件来自哪里,也可能有其他方式来实现它。 –

+0

再次感谢 - 事实证明,我们使用的是“标准”主页面,而不是“MVC 2视图主页面”。现在我已经修复了应用程序以使用“MVC 2视图母版页”,我们无法强制将母版页输入到模型中,因为这是一个相当庞大,复杂的应用程序'&一些页面使用动态类型。但是,'ViewData'可以用来进行条件检查。 – lukkea