не может получить сгенерированные элементы управления через ответ AJAX - PullRequest
0 голосов
/ 15 августа 2010

Я использую ASP.NET C # с AJAX Professional (http://www.ajaxpro.info)

1) У меня есть контейнер div с элементом управления Panel, элемент управления Panel должен содержать DropDownList, который будет сгенерирован в функции codebehind:

<div id="divDDL" runat="server">
    <asp:Panel ID="Panel1" runat="server">
    </asp:Panel>
</div>

2) У меня есть функция сценария JS "getDDL", которая отправляет данные в функцию codebehind, а затем получает ответ с сгенерированными элементами управления Panel и DropDownList:

function getDDL(lng)
{
    MyCodebahindClass.GetDDL(0, lng, callbackDDL);
    //callbackDDL is a response function
}

function callbackDDL(response)
{
    //here the response with the generated DropDownList and Panel control comes to the div element
    document.getElementById('<%=divDDL.ClientID %>').innerHTML = response.value;
}

3) Функция Codebehind «GetDDL» должна возвращать сгенерированный DropDownList внутри элемента управления Panel:

[Ajax.AjaxMethod]
public Panel GetDDL(int itemId, int lng)
{
     PanelID = Panel1.ID;
     DropDownList rubricDDL = new DropDownList();
     rubricDDL.ID = "Fashionable_Catheter";
     rubricDDL.DataTextField = "title";
     rubricDDL.DataValueField = "id";
     rubricDDL.DataSource = %LINQ STUFF%;
     rubricDDL.DataBind();

     panelID.Controls.Add(rubricDDL);
     return panelID;
}

4) Когда я пытаюсь получить сгенерированный Panel и DropDownList через ответ JS, я получаю только текст «System.Web.UI.Design.Panel» или что-то в этом роде, пытаюсь сгенерировать только DropDownList - похожий текст появляется "System.Web.UI.Design.DropDownList".

Но когда я вызываю функцию codebehind для получения этих двух элементов управления, я вижу их без проблем. Почему я не могу получить их через JS? Я все делаю нормально, отлаживаю миллион раз и не вижу проблем, не могу понять, что не так с JavaScript? Любая помощь высоко ценится.

Ответы [ 2 ]

0 голосов
/ 05 июня 2013
[Ajax.AjaxMethod]
public string GetDDL(int itemId, int lng)
{
    PanelID = Panel1.ID;
    DropDownList rubricDDL = new DropDownList();
    rubricDDL.ID = "Fashionable_Catheter";
    rubricDDL.DataTextField = "title";
    rubricDDL.DataValueField = "id";
    rubricDDL.DataSource = %LINQ STUFF%;
    rubricDDL.DataBind();
    panelID.Controls.Add(rubricDDL);
    StringBuilder sb = new StringBuilder();
    HtmlTextWriter htw = new HtmlTextWriter(new StringWriter(sb));
    panelID.RenderControl(htw);
    return sb.ToString(); 
}

в выводе ответа ajax как таковой, что любой из control.html

(т.е.) div1.html (ajaxresposeoutput)

0 голосов
/ 11 октября 2010

Хм, я думаю, вам нужно вернуть рендеринг HTML панели. Таким образом, ваш метод должен вернуть строку, и вам нужно отобразить Panel Control в вашем методе и вернуть обработанный html.

...