如何解决将html标记传递给ASP.NET用户控件
| 在以下示例中,<uc1:MyUserControl>
<p>this is html</p>
</uc1:MyUserControl>
如何在MyUserControl中以字符串形式访问“ 1”,以便可以将其注入响应中?
我不是在谈论传递诸如<uc1:MyUserControl myparameter=\"<p>this is html</p>\" />
这样的字符串参数,而是如何在开始和结束标记之间或通过诸如<MessageTemplate>
标记之类的其他机制访问真正的多行智能感知HTML标记。
可以在ASP.NET MVC 3中使用的解决方案的加分项!
编辑:
多亏了StriplingWarrior,并将此链接作为缺少的拼图,魔术才得以实现:
因此,在任何视图中:
<%@ 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中:
<%@ 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>
最后,在Ribbon.ascx.cs中(需要在MVC中手动添加)
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; }
}
}
渲染为:
<table>
<tr>
<td>I am reusable stuff that wraps around dynamic content</td>
<td>Hello world! I am <p>pure html<p> being passed into a UserControl!</td>
<td>And I am stuff too</td>
</tr>
</table>
解决方法
在典型的WebForms控件中,HTML将自动放入MyUserControl的
Controls
集合中的Literal控件中。具有模板属性的控件的工作方式略有不同,但是您仍然可以通过您正在使用其名称的属性(例如MessageTemplate
)以类似的方式访问此控件。
MVC的工作原理完全不同,我不知道是否有一种方法可以解决您所要问的问题。您可能需要考虑使用javascript分析在客户端不起作用的情况下实际呈现给客户端的内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。