В этом случае я бы сказал следующее:
- Внести изменения в набор данных
- Позвоните в веб-сервис, чтобы обновить HTML-страницу
- О методе обслуживания - я бы загружал тот же элемент управления, и данные связывали его с обновленным набором данных, например:
// 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 на стороне клиента для генерации разметки.