0
StringBuilder str=new StringBuilder();
str.Append("<div style='font-style:oblique;font-size:24px;text-align:left;margin-bottom:25px;'>");
str.Append("Products");
str.Append("</div>");
str.Append("<div style='font-style:oblique;font-size:18px;text-align:right;margin-bottom:25px;'>");
str.Append("<asp:TextBox ID='txtSearch' runat='server'></asp:TextBox> &nbsp;&nbsp; <asp:Button ID='btbSearch' runat='server' Text='Search'/>");
str.Append("</div>");
str.Append("<table width='100%' border='1' cellpadding='0' cellspacing='0'>");

在第二个<div>中,我尝试创建一个文本框和一个按钮并将它们添加到占位符中。当我使用浏览器控制台进行调试时,我在 html 代码中看到它们,但它无法在浏览器中显示,它只是在浏览器上显示表格。有什么例子可以处理这些案例吗?

4

3 回答 3

3

<asp:标签完全是服务器端标签。它们将由 ASP 引擎翻译成纯 HTML 标记。

通过将这些标记直接写入响应,您绕过了 ASP 引擎将它们重构为正确 HTML 的能力。当浏览器获取它们时,它不知道如何呈现它们,所以它只是忽略它们。

您应该将控件创建为对象,而不是字符串,例如:

TextBox txtSearch = new TextBox();
txtSearch.ID= "txtSearch";
placeHolder1.Controls.Add(txtSearch);

Button btbSearch = new Button();
btbSearch.ID = "btbSearch";
btbSearch.Text = "Search";
placeHolder1.Controls.Add(btbSearch);

或者,更好的是,您可以将该文本放在标记文件中,而不是使用后面的代码。

于 2013-02-19T16:52:48.023 回答
3

很可能您没有生成要在服务器上呈现的 ASPX 页面,而是将 StringBuilder 的输出发送到浏览器。由于asp:TextBox浏览器无法呈现类似的 ASP.Net 元素,因此您在视图中什么也看不到(节点也存在,因为它们不会使 HTML 完全无效)。

您想要生成<INPUT...>元素而不是asp:TextBox在浏览器中查看输出。

注意:可能有更好的方法来实现您的目标(即客户端模板,或视图中的常规渲染),但您需要先拼写您的实际问题。

于 2013-02-19T16:55:50.303 回答
0

您可以使用这样的代码

var tableBody=""; // here you have to define the table body yourself

var form=
    new {
        method=@"get", // decide for your request method get/post
        action=@"http://www.google.com" // the page processes the request
    };

var html=@"
<div style='font-style: oblique; font-size: 24px; text-align: left; margin-bottom: 25px'>Products</div>

<div style='font-style: oblique; font-size: 18px; text-align: right; margin-bottom: 25px'>
    <form method='"+form.method+@"' action='"+form.action+@"'>
        <input id='txtSearch' name='txtSearch'>
        &nbsp;&nbsp;
        <input type='button' id='btbSearch' text='Search' onclick='this.parentNode.submit();'>
    </form>
</div>

<table width='100%' border='1' cellpadding='0' cellspacing='0'>"+tableBody+@"
</table>
";

html的固定部分代码不一定与StringBuffer. 如果要动态生成 html,请考虑使用 LINQ。

自己应该做的在代码的注释中。请注意,txtSearch不仅给出了id,而且还给出了name

于 2013-02-19T17:33:44.163 回答