从数据库中解析标记并将其呈现给asp:LinkBut​​ton控件

时间:2018-09-24 21:35:01

标签: c# asp.net render

我的ASP.NET站点的后端有一个编辑器,您可以在其中添加文章的内容。在该编辑器内部,我希望能够为asp:LinkButton控件添加片段,然后可以呈现这些片段并在前端工作。我决定应该在编辑器中使用表单,然后解析并用asp:LinkButton控件替换。

<form action="linkbutton" id="3"><img src="button.jpg" /></form>

应该变成这样的功能按钮:

<asp:LinkButton ID="btnLink3" runat="server" OnClick="btnClick" CommandArgument="3">
    <img src="button.jpg" />
</asp:LinkButton>

应该最终呈现给

<a id="cphBody_btnLink3" href="javascript:__doPostBack('ctl00$cphBody$btnClick','')" />

当然,我可以将表格替换为更合适的内容,但是现在这不是问题。问题是链接按钮未正确呈现。 OnClick事件不起作用,CommandArgument不存在。

在我的ASPX页面中,我有应添加最终结果的这一部分:

<body>
    <form runat="Server" id="articleContent">
        <%= article.Content %>
    </form>
</body>

在上面的表单中,必须将每个带有action="linkbutton"的表单呈现给asp:LinkButton控件(即{ HTML中的{1}}元素

在代码中我有这个:

<a>

我在这里有一些问题。首先,我不知道如何从using Models; protected void Page_Load(object sender, EventArgs e) { // I get the article's content here Models.Article article = db.Articles.FirstOrDefault(...); // pattern which will help me find the forms string pattern = "<form action=\"linkbutton\" id=\"(.*?)\">(.*?)<\\/form>"; MatchCollection matches = Regex.Matches(experience.Overview, pattern); int linkIndex = 1; if (matches.Count > 0) { foreach (Match m in matches) { // create the button LinkButton linkButton = new LinkButton(); linkButton.ID = "btnLink" + linkIndex.ToString(); linkButton.CommandArgument = m.Groups[1].ToString(); linkButton.Click += new EventHandler(btnClick); StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); HtmlTextWriter writer = new HtmlTextWriter(sw); linkButton.RenderControl(writer); article.Content = article.Content.Replace(m.Value, sb.ToString()); linkIndex++; } } } public void btnClick(object sender, EventArgs e) { LinkButton btn = (LinkButton)sender; var id = btn.CommandArgument; } 控件的开始和结束标记内的表单(在这种情况下可以是图像)中添加内容。

第二,将按钮转换为asp:LinkButton。没有<a id="btnLink3"></a>,没有onclick。我不明白我在这里想念什么。

0 个答案:

没有答案