我正在尝试在asp.net中动态创建一个表单,并通过在呈现的控件上执行文本替换将其呈现在页面上。
(我不能将控件推到页面上的面板上,这将是理想的情况,我现在不会遇到这个问题)
我创建了一个标签,文本框和一个按钮,并将它们全部添加到面板中。然后使用TextWriter将此面板渲染为一个字符串,然后我将使用它在我的副本上执行我的替换。
Label lbl = new Label();
lbl.Text = "Enter Amount";
lbl.Attributes.Add("style", "width:25%; vertical-align:middle;");
lbl.CssClass = "donate-label";
lbl.ID = "lblAmount";
TextBox tb = new TextBox();
tb.ID = "tbAmount";
tb.Attributes.Add("style", "padding-left:25px; width:50%;");
lbl.AssociatedControlID = tb.ID;
Button b = new Button();
b.ID = "btnDonate";
b.Text = "Make a Donation";
b.CssClass="block-btn right-arrow red-bg right";
b.Click += new EventHandler(btnDonate_Click);
b.Attributes.Add("style", "display:table-cell; margin-top:0; width:40% !important;");
Panel pnlForm = new Panel();
pnlForm.CssClass="form clearfix donate-form";
pnlForm.Attributes.Add("style", "width:70%");
pnlForm.Controls.Add(lbl);
pnlForm.Controls.Add(tb);
pnlForm.Controls.Add(b);
现在,如果我要将上面的面板添加到已经存在于页面上的面板上,它将完美地工作并且正如预期的那样,但是控件渲染会导致它在某处断开..
TextWriter myTextWriter = new StringWriter();
HtmlTextWriter myWriter = new HtmlTextWriter(myTextWriter);
pnlForm.RenderControl(myWriter);
string body = p.Copy.Replace("##donate##", myTextWriter.ToString());
我得到的错误如下:
无法找到带有ID&t 39Amount'与Label' lblAmount'。
相关联第146行:pnlForm.RenderControl(myWriter);
如果我删除了我的标签的assoicatedControlID,它可以正常工作,但遗憾的是它将我的标签呈现为不是我需要的跨度,我需要将其呈现为带有' for&#39的标签;属性。
答案 0 :(得分:0)
最简单的方法是使用带有html标签的文字
Literal lbl = new Literal();
lbl.Text = "<Label For='tbAmount' style='width:25%; vertical-align:middle;' class='donate-label' > Enter Amount </label>";
lbl.ID = "lblAmount";
顺便说一下tbAmount id是静态的,这样你的文本框就不会有任何不可预知的id
tb.ClientIDMode= System.Web.UI.ClientIDMode.Static