在我的数据库中,我存储的HTML也包括ASP内联表达式<%= %>
。我需要在页面上呈现这些内联表达式,但是它们被呈现为字符串文字。
例如。我的数据库字段“描述”存储HTML标记和内容。在该字段的数据中,还存在asp .net内联表达式,例如<%= AuthorName %>
。这些变量在后面的代码中声明,并且需要在“描述”所绑定的页面上呈现。
此外,有些用户控件(.ascx
)控件需要动态呈现。
这是一些详细的示例。我后面的代码声明了某些变量:
protected Int64 EventId, EventInstanceId;
protected string EventName, HostedBy, Tag, ShortDescription, LongDescription;
protected decimal Cost, EarlyRegDiscount;
protected DateTime StartDateTime, EndDateTime, EarlyRegDate;
这些变量通过存储在数据库中的信息在Page_Load
上初始化。
我的前端看起来像这样:
<div id="EventName">
<%= EventName %>
</div>
<div id="Description">
<%= LongDescription %>
</div>
c#字符串变量(和关联的数据库字段)LongDescription
包含附加的HTML
标记以及asp内联表达式,例如<%= HostedBy %>
。因此,无论呈现<%= LongDescription %>
并包含HTML
标记的任何地方,它都还应该呈现任何嵌入的表达式,例如<%= HostedBy %>
。
如何实现?
答案 0 :(得分:1)
因为实现是灵活的(如您在上面的评论中所述),所以似乎会有更好的方法来完成您想完成的事情。话虽如此,该解决方案可能适合您。
您可以在变量中使用自定义语法,而不是在变量中使用ASP.Net内联表达式,而将其替换为变量内容。我过去曾使用它来加载模板并向其中填充数据(例如,从磁盘/数据库加载HTML电子邮件通知模板,并以编程方式插入实际变量值)。
protected String WidgetOutput;
protected String DatabaseEntry;
protected String WidgetName;
protected String WidgetDescription;
protected void Page_Load(object sender, EventArgs e) {
// Set some sample variable content
WidgetName = "Fred The Widget";
WidgetDescription = "I am a basic widget";
// Load value of DatabaseEntry from database. (Setting it manually here for testing purposes.)
DatabaseEntry = "<div><h1>Widget Info</h1><p>This widget's name is <strong>%%WidgetName%%</strong>.</p><p>This widget's description is <strong>%%WidgetDescription%%<strong>.</p></div>";
// Prepare the database entry for output by replacing placeholders with actual variable contents.
DatabaseEntry = DatabaseEntry.Replace("%%WidgetName%%", WidgetName);
DatabaseEntry = DatabaseEntry.Replace("%%WidgetDescription%%", WidgetDescription);
// Populate the variable that will be output on the page
WidgetOutput = DatabaseEntry;
}
您提到需要包括UserControls的输出。如果这些内容也要在模板中呈现,则可以使用this answer将控件输出呈现为字符串,然后像上面所做的那样将其替换为变量。
如果这对您不起作用,也许您可以进一步说明为什么必须按照自己的方式做事,然后我们可能会指导您寻求更好的解决方案。