ASP.NET UpdatePanel и Javascript __dopostback - PullRequest
6 голосов
/ 15 июня 2011

Я вызываю частичный постбэк из javascript следующим образом:

function GetPolicyClick()
   {"__dopostback('UpdatePanel1', 'PostCall')";}

Это делает половину того, что мне нужно. вызывает частичную обратную передачу, только для моей UpdatePanel.

Теперь сложная часть.Я пытаюсь (как-то) сослаться на второй аргумент __dopostback в моем коде позади. Это не работает:

Private Sub UpdatePanel1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles UpdatePanel1.Load

    Dim MyArg As String = Request("__EVENTARGUMENT")

End Sub

Я просто получаю пустую строку.

Конечно, то, что я пытаюсь сделать, может быть совершенно неверным (как в случае свсе остальное я пытаюсь сделать с ASP).Я подозреваю, что мой codebehind получает аргумент события со страницы, а не с панели, но я действительно не знаю, есть идеи?

1 Ответ

11 голосов
/ 15 июня 2011

Если вы хотите поместить какое-то значение в _ EVENTARGUMENT , вы должны сделать это с помощью javascript перед отправкой формы по _doPostBack ('UpdatePanel1', '') потому что __EVENTTARGET является скрытым полем и в вашем HTML-документе это выглядит так:

<input type="hidden" value="" id="__EVENTARGUMENT" name="__EVENTARGUMENT">

Я рекомендую вам сделать что-то вроде этого:

function setArgAndPostBack() {
    var arg = document.getElementById('__EVENTARGUMENT');
    var arg = document.getElementById("__EVENTARGUMENT");
    arg.value = 'something you want to put to server';
    __doPostBack('UpdatePanel1', '');
}

Если вы используете jQuery, он будет короче:

function setArgAndPostBack() {
    $("#__EVENTARGUMENT").val('something you want to put to server');
    __doPostBack('UpdatePanel1', '');
}

Если это не работает, я хотел бы предложить вам поместить одно скрытое поле в панель обновления:

<asp:UpdatePanel runat="server" ID="UpdatePanel1">
    <ContentTemplate>
        <asp:HiddenField ID="hdnData" value="" runat="server" />
        <!-- your content goes here -->
    </ContentTemplate>
</asp:UpdatePanel>

А затем выполните ту же работу, что и выше:

function setArgAndPostBack() {
    //Here hidden field is filled with your data
    $("#<%=hdnData.ClientID%>").val('something you want to put to server');
    __doPostBack('UpdatePanel1', '');
}

В первом сценарии вы можете получить __EVENTARGUMENT на стороне сервера:

String args = Request["__EVENTARGUMENT"];

Если первый сценарий не работает, вы можете использовать что-то вроде этого:

String args = hdnData.Value;//This works even in Page_Load function.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...