在以下示例中,
<uc1:MyUserControl>
<p>this is html</p>
</uc1:MyUserControl>
如何在MyUserControl中作为字符串访问"<p>this is html</p>"
,以便我可以将其注入响应中?
我不是在谈论传递像<uc1:MyUserControl myparameter="<p>this is html</p>" />
这样的字符串参数,而是如何在开始和结束标记之间或通过其他一些机制(如{{}访问真正的多行智能HTML标记。 1}}标签。
在ASP.NET MVC 3中运行的解决方案的加分点!
修改
感谢StriplingWarrior和this link作为缺失的拼图,魔术成了:
所以,在任何观点中:
<MessageTemplate>
在Ribbon.ascx中:
<%@ Register src="../../Shared/Ribbon.ascx" tagname="Ribbon" tagprefix="uc1" %>
...
<uc1:Ribbon ID="Ribbon" runat="server">
<Content>
Hello world! I am <b>pure html</b> being passed into a UserControl!
</Content>
</uc1:Ribbon>
最后,在Ribbon.ascx.cs中(需要手动添加MVC)
<%@ Control Language="C#" CodeBehind="Ribbon.ascx.cs" Inherits="NunYourBeezwax.Views.Shared.Ribbon" %>
<table>
<tr>
<td>I am reusable stuff that wraps around dynamic content</td>
<td><%= this.Content %></td>
<td>And I am stuff too</td>
</tr>
</table>
将呈现为:
using System.Web.Mvc;
using System.Web.UI;
namespace NunYourBeezwax.Views.Shared
{
[ParseChildren(true, "Content")]
public class Ribbon : ViewUserControl
{
[PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty)]
public string Content { get; set; }
}
}
答案 0 :(得分:3)
在典型的WebForms控件中,HTML将自动放入MyUserControl的Controls
集合中的Literal控件中。具有模板属性的控件的工作方式稍有不同,但您仍然可以通过您正在使用其名称的属性(例如MessageTemplate
)以类似的方式访问它。
MVC的工作方式完全不同,我不知道是否有办法做你在那里问的问题。您可能需要考虑使用javascript来分析实际上在客户端呈现的内容,如果它不适合您。