以下是我的示例代码:
<script type="text/javascript">
$(function () {
$('body')
.append('<form id="form1"></form>'); //append a new form element with id mySearch to <body>
$('#form1')
.attr("runat", "server")
.append('<asp:Button runat="server" ID="btn1"/>');
});
</script>
这就是我的身体标签的样子:
<body>
</body>
我收到此错误:
Control 'btn1' of type 'Button' must be placed inside a form tag with runat=server.
提前致谢! :)
更新:我试图省略
.append('<asp:Button runat="server" ID="btn1"/>');
当我运行萤火虫时,我得到了这个:
<body>
<form id="form1" runat="server"></form>
</body>
它有一个runat =“server”。为什么我不能把我的asp:Button放在里面? O_O
答案 0 :(得分:4)
您更新的问题仍然是错误的方法。你不能这样做:
$('#form1').attr("runat", "server")
并期望它的工作方式与您输入的相同:
<form runat="server">
因为上面的代码是服务器端处理,实际上是在客户端上呈现,如下所示:
<form method="post" action="default.aspx" id="ctl00">
这看起来与你正在做的完全不同。
您有两种选择:
使用Javascript停止尝试添加任何ASP.NET控件(即以<asp:
开头)或其中包含runat="server"
的任何内容。如果你真的必须使用Javascript,那么使用常规的HTML控件。
停止使用Javascript,并使用<asp:
正确使用runat="server"
控件或HTML控件,然后从后面的代码执行您需要执行的操作。
现在为切线。
关于Control 'btn1' of type 'Button' must be placed inside a form tag with runat=server.
的错误。假设您正确使用<form runat="server">
并重试。你可能会发现它(有点)有效!
<form id="form1" runat="server">
<asp:Button ID="btn2" Text="Button 2" runat="server" />
<script>
$(document).ready(function () {
$('#<%= form1.ClientID %>').append('<asp:Button Text="Button 1" ID="btn1" runat="server"/>');
});
</script>
</form>
此将呈现,但不正确。除了令人困惑,讨厌的代码,它只能起作用,因为ASP.NET实际上为那个<asp:Button
呈现HTML并将其放在脚本块中,所以发送给客户端的是这个(和两个按钮......但仍然不是你输入的内容。)
<input type="submit" name="btn2" value="Button 2" id="btn2" />
<script>
$(document).ready(function () {
$('#form1').append('<input type="submit" name="btn1" value="Button 1" id="btn1" />');
});
</script>
现在部分你没想到。从代码隐藏中,您可以在Page Load:
上执行此操作protected void Page_Load(object sender, EventArgs e)
{
btn1.Text = "This is Awful";
}
而不是在屏幕上显示两个按钮Button 2
和Button 1
,第二个按钮现在显示为This is Awful
。
...但是再次,这是完全错误的,如果你尝试这样做,它将会破坏大多数其他<asp:
控件(我不确定为什么ASP.NET会转换Javascript块中的代码)所有)。因此,请参阅上面的两个选项,了解如何继续。
答案 1 :(得分:1)
首先,这部分代码没有按预期运行
.append('<asp:Button runat="server" ID="btn1"/>');
用于该控件的runat="server"
必须在您设计页面时添加,或者在服务器端以编程方式添加,由服务器上的代码编译并创建一个html部分。
当你在客户端上添加javascript时,服务器不知道任何事情,也无法运行它,nether编译它。
现在在第一部分中,您尝试再次在客户端页面中添加新的form
$('body')
.append('<form id="form1"></form>');
$('#form1')
这是webform上的一个问题,因为asp.net必须只包含一个表单元素。在一个完全由asp.net呈现的表单中,您需要添加其他按钮而不是创建第二个按钮。
要继续,您需要在页面上定义表单标记(不是使用javascript)。如果你想添加回发输入按钮,你可以这样做,但必须将它们放在现有的表单中,不要创建新的表单,而不要运行runat = server。然后手动处理该帖子后面的代码 - 这意味着你不会调用任何特定的函数,你只需阅读回发变量。