使用ajax从用户控件获取值
本文关键字:获取 控件 用户 ajax 使用 | 更新日期: 2023-09-27 18:04:04
我有数据在领域。Ascx和我有一个标签和文本框字段。ascx和我绑定的文本框和标签动态数据和显示在webform.aspx.现在我想获得标签文本和文本框值在webform。当单击webform中的按钮时。
field.ascx:
<asp:DataList ID="dtlist" runat="server" RepeatColumns="4" CellPadding="5" EnableViewState="True">
<ItemTemplate>
<data:Value ID="test" runat="server" />
<ItemTemplate>
</asp:DataList>
Fields.ascx:
<asp:Label ID="lbl" runat="server" />
<asp:TextBox id="tb4" runat="server" />
Webform.aspx
<button onclick="myFunction()">Click me</button>
[WebMethod]
public static string LoadUserControl()
{
using (Page page = new Page())
{
HtmlForm form = new HtmlForm();
UserControl userControl = (UserControl)page.LoadControl("UserControls/field.ascx");
form.Controls.Add(userControl);
using (StringWriter writer = new StringWriter())
{
page.Controls.Add(form);
HttpContext.Current.Server.Execute(page, writer, false);
return writer.ToString();
}
}
}
您在ASP的下一行中破坏了用户控件中的值。. NET AJAX页面方法:
using (Page page = new Page())
实际上,在ASP中根本不能访问Page
对象。. NET AJAX页面方法,因为它是static
,根本不与ASP. NET进行交互。. NET页面生命周期。
如果你只打算有一个用户控件的实例,那么你可以在你的myFunction
JavaScript函数中使用jQuery选择器来提取Label
和TextBox
控件的值(注意容器命名的ASP. js . js)。用于母版页,以及控件层次结构)。然后,您可以构建一个对象字面量以传递给ASP。. NET AJAX页面方法,通过jQuery .ajax()
函数。
如果您的页面上有多个用户控件的实例,那么您最好使用服务器端解决方案,并结合ASP。NET UpdatePanel
控件给服务器异步调用的错觉(读:更少的屏幕闪烁,因为只有部分回发)。在这种情况下,您可以拥有想要从用户控件中提取的值的public
属性,并且您的服务器端代码将通过ID引用每个用户控件实例。
所以底线是,如果您不需要实际使用客户端JavaScript函数来调用服务器,那么只需使用服务器端按钮单击处理程序来执行从服务器端控件获取值的逻辑。当试图从可能有多个实例的服务器端控件中获取值时,情况很快就会变得混乱。