Найти элемент управления String из веб-службы asp.net - PullRequest
1 голос
/ 09 июня 2010

Что ж, так как отправка объекта WebControl через JSON кажется довольно сложной с помощью jquery.ajax (), я решил отправить имя элемента управления в виде строки, потому что я знаю, как это сделать. Затем я быстро понял, что из веб-службы я не знаю, как искать элемент управления по имени. Поскольку это сервис, я не могу заставить Control.FindControl () работать, у кого-нибудь есть идеи или предложения? Все, что я пытаюсь сделать, это вызвать databind () на моем radcombobox.

Заранее спасибо!

Для любого из вас, кто знает что-либо об элементах управления asp.net/rad - я в основном обновляю базу данных и хочу, чтобы radcombobox снова синхронизировался с этой базой данных после добавления чего-либо, прежде чем я автоматически выберу то, что было только что добавлено. Кроме databind я должен позвонить что-нибудь, чтобы обновить этот список?

Еще раз спасибо!

1 Ответ

1 голос
/ 06 апреля 2011

В этом случае я бы сказал следующее:

  1. Внести изменения в набор данных
  2. Позвоните в веб-сервис, чтобы обновить HTML-страницу
  3. О методе обслуживания - я бы загружал тот же элемент управления, и данные связывали его с обновленным набором данных, например:

    // 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 на стороне клиента для генерации разметки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...