因为使用 jquery.ajax() 通过 JSON 发送 WebControl 的对象似乎相对困难,所以我决定将控件的名称作为字符串发送,因为我知道该怎么做。然后我立即意识到,从 Web 服务中,我实际上并不知道如何通过 ID 名称搜索控件。由于它是一项服务,我似乎无法让 Control.FindControl() 工作所以有人有想法或建议吗?我要做的就是在我的 radcombobox 上调用 databind()。
提前致谢!
对于任何了解 asp.net/rad 控件的人来说 - 我基本上是在更新数据库,并希望 radcombobox 在添加内容后再次与该数据库同步,然后再自动选择刚刚添加的内容。除了数据绑定(bind)之外,我还需要调用任何东西来刷新该列表吗?
再次感谢!
最佳答案
在这种情况下我会采用以下方式:
- 对数据集做一些改动
- 调用 web 服务更新 html 页面
- 在服务方法上 - 我将加载相同的控件并将其与更新后的数据集数据绑定(bind),如下所示:
// create standard webform
Page page = new Page();
HtmlForm form = new HtmlForm();
page.Controls.Add(form);
// prepare for rendering
StringBuilder html = new StringBuilder();
StringWriter tw = new StringWriter(html);
HtmlTextWriter hw = new HtmlTextWriter(tw);
// load the control to render
Control control = page.LoadControl("relativeControlPath");
TypeOfYourControl myControl = (TypeOfYourControl)control;
myControl.DataSet = GetUpdatedDataSet();
myControl.DataBind();
form.Controls.Add(myControl);
// render
HttpContext.Current.Server.Execute(page, hw, false);
// pack the output as JSON
result.Add("html", html.ToString());
JavaScriptSerializer ser = new JavaScriptSerializer();
string json = ser.Serialize(result);
return json;
4
。当 ajax 调用收到上一步的响应时,我所要做的就是用新呈现的元素替换当前的 dom 元素:
$.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
url: "webServiceUrl",
data: "{'if you need a specific params to identify nature of your control':'" + data + "'}",
dataType: 'json',
success: function(result) {
var output = eval('(' + result.d + ')');
$("oldNode").remove();
$("parentNode").append(output.html);
}
});
当您处理复合控件并且无法控制或更改它们的行为时,此方法通常适用。 但是对于一般的异步更新方法,我会推荐更轻量级的方法,比如通过 JSON 发送序列化数据,以及在客户端使用 jQuery 模板之类的东西来生成标记。
关于asp.net - 从 asp.net Web 服务中按字符串查找控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3009361/