无法访问通过用户控件动态加载的控件(如文本框、复选框、复选框列表)的数据。

问题描述 投票:0回答:1

请找到我正在努力的场景。

我有一个aspx页面,其内容是通过动态加载各种用户控件来加载的。每个用户控件都有自己的一套控件,如文本框、复选框或复选框。

在点击 "保存 "按钮时,我想从文本框和复选框列表中获取数据。

我能够使用以下代码成功地从这些控件中收集数据。

UserControl ctl1 = placeholder.FindControl("user_control_1") as UserControl;
if (ctl1 != null)
{
RadTextBox txtName = ctl1 .FindControl("txtFirstName") as RadTextBox;
if (txtName != null)
{
// Perform required CRUD
}
}

在我有新的需求之前,这种方法运行良好。为了解决新的需求,我不得不改变逻辑,从jQuery发出AJAX请求,如下图。

$.ajax({
type: "POST",
url: window.location.href,
data: {
data1: data
},
success: function (result) { //success
},
failure: function (result) {
//failure
}
}).done(function (o) {
//Error free
});

通过这种请求,我无法访问我的.cs上的文本框数据(或checkboxlist的选中项)。任何对txtFirstName.Text的调用都返回为null。

UserControl ctl1 = placeholder.FindControl("user_control_1") as UserControl;
if (ctl1 != null)
{
RadTextBox txtName = ctl1 .FindControl("txtFirstName") as RadTextBox;
if (txtName != null)
{
// Works well till this point.
// txtName.Text returns empty value, inspite of having data in it
}
}

有谁能给我指点一下如何实现这个问题?

EDIT: 由于在点击 "保存 "按钮时,会产生一个新的AJAX请求,所有的用户控件都会被再次加载,这导致最终用户输入的所有数据丢失。我有什么办法可以在AJAX请求生成之前捕获所有终端用户输入的数据?也许,在jQuery中为文本框和复选框列表创建一个JSON,然后在 "数据 "中传递?

c# jquery asp.net ajax dynamic-usercontrols
1个回答
0
投票

听起来你是把jquery ajax调用和webforms混合在一起,这很好。

为了将值传回服务器端代码,你需要确保相关的HTML控件被设置为runat="server"。 这将把用户控件添加到视图状态中。 只要确保你添加了一个webform UpdatePanel。 如果没有,你会有一个完整的post-back,而你真正想要的是一个部分post-back。 你应该可以在DOM中的任何 "输入 "控件中添加 "runat "属性。 如果你仍然有问题或者希望使用ASP.NET原生控件,你可以在页面中添加一个隐藏控件,并通过javascript设置它的值。

如果你想让一切都达到现代设计,你可以把viewstate全部禁用,然后调用一个webmethod来POST你的数据,我建议使用WebAPI,因为它比WCF更容易设置。 这样做将消除使用Ajax UpdatePanels的需要,并大大简化代码。

如果你使用的是Telerik,那么你可以使用RadAjaxManager来代替UpdatePanel。

EDIT:对不起,我只是注意到你想从Ajax中POST,并通过viewstate发送到WebForms后端(aspx.cs,我假设)。 这将无法工作,除非你做一个表单数据的帖子,这似乎是不必要的努力。

如果我是你,我会切换到WebAPI。或者,如果你真的想保留后端代码,我会使用UpdatePanels,将值设置为runat=true的控件,用某种隐藏的按钮来驱动部分postback,然后引用runat控件来提取值。

最后,如果你真的真的想把jQuery Ajax语句保留在那里,而且你真的不想花力气添加WebAPI,你可以直接切换到ASMX,然后把你的ASMX web方法添加到aspx.cs文件中......虽然我建议不要这样做。

© www.soinside.com 2019 - 2024. All rights reserved.