因为使用jquery.ajax()通过JSON发送WebControl的对象似乎相对困难,所以我决定将控件的名称作为字符串发送,因为我知道如何做到这一点。然后我立即意识到,从Web服务,我实际上并不知道如何通过ID名称搜索控件。既然它是一项服务,我似乎无法让Control.FindControl()工作,所以有人有想法或建议吗?我要做的就是在我的radcombobox上调用数据绑定()。
提前致谢!
对于任何对asp.net/rad控件一无所知的人 - 我基本上都在更新数据库,并希望在我自动选择刚刚添加的内容之后,再添加一些内容后,radcombobox会再次与该数据库同步。除了数据绑定,我必须调用任何东西刷新该列表吗?
再次感谢!
答案 0 :(得分:1)
我在这种情况下的方式如下:
// 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模板的方法来生成标记。