2013-01-24 58 views
3

这里是我的示例代码:如何在使用javascript的<form>标签内追加<asp:Button />等。

<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 = “服务器”。为什么我不能把我的asp:Button放在里面? O_O

+0

只需使用一个常规的输入按钮......这正是'asp:button'呈现的样子。 – MikeSmithDev

+0

是的,它的工作原理,但我想使用像asp:Repeater'asp ctrls绑定我的数据。有没有其他方法?无论如何,谢谢@MikeSmithDev –

+2

你不能通过Javascript添加服务器控件。你为什么甚至想要这样做?为什么你不能直接在页面中输入这些控件并摆脱你的Javascript? – MikeSmithDev

回答

4

您更新的问题仍然是错误的方法。你可以这样做:

$('#form1').attr("runat", "server") 

,并期望它的工作一样,如果你输入的那样:因为上面的标签被处理服务器端

<form runat="server"> 

,实际上呈现在客户端是这样的:

<form method="post" action="default.aspx" id="ctl00"> 

这看起来不像你在做什么。

你有两个选择:

  1. 停止尝试添加任何ASP.NET控件(即具有<asp:开始)或任何与它runat="server"使用Javascript。如果你真的必须用Javascript来做到这一点,那么使用普通的HTML控件。

  2. 停止使用Javascript并实际上正确使用<asp:控件或HTML控件与runat="server",然后从代码背后做你需要做的事情。

现在为切线。

关于您的错误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> 

而现在的部分你没有想到。从代码隐藏,你可以这样做页面加载:

protected void Page_Load(object sender, EventArgs e) 
{ 
    btn1.Text = "This is Awful"; 
} 

和不是有两个按钮,屏幕上说Button 2Button 1,第二个按钮现在说This is Awful

...但是,如果您尝试这样做(并且我不确定为什么ASP.NET会根据JavaScript块转换代码),那么这是完全错误的,并且会为大多数其他<asp:控件打破。因此,请参阅上述两个选项,了解如何继续。

+0

原因我试图把一个ASP CTRL和追加它使用JavaScript是因为我想做一个像slideDown当用户点击一个ASP按钮:按钮asp:Repeater会做slideDown。我想我应该接受你的建议。感谢@MikeSmithDev! :) –

+0

@DavidDeChavez你想要做什么仍然是可能的,只是采取不同的方法...任何新方法的问题,只是问一个新的问题:)另外,我在我的答案中增加了一点点解释。 – MikeSmithDev

1

的所有代码这一部分首先按预期

.append('<asp:Button runat="server" ID="btn1"/>'); 

runat="server"携手合作,当你设计的页面必须补充的是控制,或在服务器端语法PRO,由编译器不会运行代码隐藏在服务器上并创建一个html部分。

当你在客户端添加javascript时,服务器并不知道任何东西,也不能运行它,所以编译它。

现在,在第一部分中,您尝试添加一个新的form内页上的客户端再次

$('body') 
      .append('<form id="form1"></form>'); 
     $('#form1') 

这是Web窗体上的一个问题,因为一个asp.net必须只包含一个表单元素。在asp.net中所有已准备好呈现的表单中,您需要添加其他按钮,而不是创建第二个按钮。

要继续前进,您需要在页面上定义一个表单标记(而不是javascript)。如果你想添加回传输入按钮,你可以做,但必须将它们放在现有的表单中,不要创建新的表单,并且使用runat = server。然后手动处理该代码后面的代码 - 这意味着您不打算调用任何特定的函数,您只需阅读回发后的变量。

+0

是的,这是真的。但是当我在页面上定义表单标签时,我仍然不能放置任何asp ctrls。请参阅上面我更新的问题。谢谢@Aristos –

+0

所以它似乎没有办法使用javascript放置任何asp ctrls。不管怎么说,还是要谢谢你! :D –

相关问题