如何将ContentPlaceHolder作为ASP.NET MVC中母版页中URL的源

时间:2010-07-19 15:18:54

标签: asp.net-mvc master-pages

我有多个具有此模式的页面:

<iframe frameborder ="0" src="[someURL]" width="100%" height="900">
</iframe>

我想把除了URL之外的所有内容都分解成母版页,所以我尝试了这个:

母版页

<iframe frameborder ="0" src=<asp:ContentPlaceHolder ID="Url" runat="server" /> width="100%" height="900">
</iframe>

儿童页面

<asp:Content ID="Content2" ContentPlaceHolderID="Url" runat="server">
    "http://myURL"
</asp:Content>

但它似乎不起作用。我收到这个错误:

在母版页中找不到ContentPlaceHolder'Url'

我上面有一些语法错误吗?

3 个答案:

答案 0 :(得分:1)

听起来你想重新使用一个片段,以便View可以指示iFrame的URL是什么,并且Master拥有实际的iFrame。

考虑这个潜在的解决方案:

将URL从Controller放入ViewData。公约是观点是愚蠢的。所以你可以把这个iFrame放到你的主人身上:

<iframe frameborder ="0" src="<%=ViewData["yourURL"] %>" width="100%" height="900"></iframe>

这要求您的Controller知道或可以找到所请求的View的URL。您可以在Controller方法中对此进行硬编码,或者从web.config中提取它。

答案 1 :(得分:1)

我认为这不会很好用......你可以将一个URL传递给控制器​​内的ViewData,然后注入吗?或者创建一些组件,根据当前URL或其他内容从后端源中提取正确的值?

HTH。

答案 2 :(得分:0)

有更好的方法可以将您的源码放入元素中,但如果您需要坚持使用您正在使用的实现,您可以这样做...

<iframe frameborder ="0" src="<asp:ContentPlaceHolder ID="UrlContent" runat="server" />" width="100%" height="900">
</iframe>

请注意,我在内容占位符之前和之后都有引号。然后你可以拥有看起来像这样的内容......

<asp:Content ID="Content3" ContentPlaceHolderID="UrlContent" runat="server">
    http://www.stackoverflow.com
</asp:Content>

Intelisense不会喜欢你想做的事情,但它会起作用。