我的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
。我不明白我在这里想念什么。