Сбой запуска обратной передачи из Javascript - PullRequest
2 голосов
/ 17 ноября 2010

Я пытаюсь вызвать обратную передачу, если определенное условие выполняется. Первоначально пользователь нажимает кнопку в моей форме, сервер выполняет определенную работу, и в процессе выполнения этой работы он назначает скрытому полю значение «1». Когда страница перезагружается после того самого первого постбэка, я пытаюсь использовать javascript для проверки скрытого поля, и если это «1», мне нужно, чтобы страница снова постбэкивала, чтобы серверная часть могла выполнить некоторую дополнительную обработку. Причина, по которой это делается окольным путем, заключается в том, что я могу создавать элементы управления на форме из своего кода на C #, а также загружать файл за 1 пользовательское взаимодействие. Вот что у меня есть:

<script type="text/javascript" language="JavaScript">
        function atload() {
            var HWInfo = document.getElementById('HiddenHW').value;
            if (HWInfo == '1') {
                alert("flag has been set");

                __doPostBack('<%= hdnHidden.UniqueID  %>', '');
             }

        }
        $(document).ready(atload);

    </script>

Предупреждение о том, что флаг установлен правильно, срабатывает, а __doPostBack - нет. В моем ASPX-файле есть соответствующая часть:

 <form id="InventoryForm" runat="server">

<div>
    <asp:Label ID="lblClientList" runat="server" Text="Client List"></asp:Label>
    <asp:DropDownList ID="comboClientList" runat="server"></asp:DropDownList>
    <asp:Label ID="spacer1" runat="server" Text="     "></asp:Label>
    <asp:Button ID="btnGenerateHWReport" runat="server" Text="Generate Hardware Inventory Report" />
    <asp:Label ID="spacer2" runat="server" Text="     "></asp:Label>
    <asp:Button ID="btnGenerateSWReport" runat="server" Text="Generate Software Inventory Report" />
    <br />
    <br />

    <asp:Panel ID="MissingCompPanel" runat="server"></asp:Panel>
    <asp:HiddenField ID="HiddenHW" runat="server" Value="0" />
    <asp:HiddenField ID="hdnHidden" runat="server" />

</div>
</form>

Я могу сказать, что постбэк никогда не сработает, потому что у меня есть точки останова в коде Page_Load C #, которые никогда не срабатывают. У меня есть точки останова почти на каждой строке этого:

        if (!Page.IsPostBack)
        {
            // Page is not a postback, this is the first visit here
            string foo = HiddenHW.Value;
        }
        else
        {
            // Page is a postback and not initial load
            string foo = HiddenHW.Value;
        }

Почему мой __doPostBak после оповещения не срабатывает, и есть ли лучший способ сделать это? Конечный результат, который я хочу получить, - это если мое скрытое поле равно 1, тогда я хочу, чтобы моя вторая поездка на сервер состоялась из 1) фактического события и 2) знала, что скрытое поле имеет значение «1», а не значение по умолчанию «0».

Спасибо!

Ответы [ 3 ]

4 голосов
/ 17 ноября 2010

как насчет того, чтобы просто нажать кнопку отправки программно и вызвать ее __doPostBack, как это обычно делается?

0 голосов
/ 17 ноября 2010

Когда вы получаете значение HiddenHW, вы не используете правильный идентификатор. Если вы посмотрите на визуализированный источник, идентификатор элемента управления будет выглядеть примерно так: ctl00_HiddenHW. Чтобы получить этот идентификатор, вы должны использовать HiddenHW.ClientID. Я считаю, __doPostBack также нужен ClientID, а не UniqueID.

function atload() {
    var HWInfo = document.getElementById('<%= HiddenHW.ClientID %>').value;
    if (HWInfo == '1') {
        alert("flag has been set");

        __doPostBack('<%= hdnHidden.ClientID %>', '');
    }
}
0 голосов
/ 17 ноября 2010

Попробуйте вызвать метод __doPostBack на странице вместо скрытого элемента управления

__doPostBack('__Page', '');
...