如何在asp.net页上呈现存储在数据库中的内联表达式?

时间:2019-02-07 01:22:15

标签: c# asp.net .net

在我的数据库中,我存储的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 %>。 如何实现?

1 个答案:

答案 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将控件输出呈现为字符串,然后像上面所做的那样将其替换为变量。

如果这对您不起作用,也许您可​​以进一步说明为什么必须按照自己的方式做事,然后我们可能会指导您寻求更好的解决方案。