单击第二个按钮后服务器端的隐藏字段更新

Hidden field updates on server side after second button click

我有一个隐藏字段,单击一个按钮后,我将通过 Javascript 对其进行更新,但是当我尝试通过后面的代码访问它时,在我第二次单击该按钮之前没有任何值。当我通过浏览器检查时,我能够看到隐藏字段值。

Default.aspx

<script type="text/javascript">
    function LoadHtml(inputState, inputStateAbbr, inputProgramType, inputHealthCenter, inputCity) {

        $.ajax({
            url: omitted,
            type: "POST",
            async: false,
            data: {
                state: inputState,
                stateAbbr: inputStateAbbr,
                programType: inputProgramType,
                healthCenter: inputHealthCenter,
                city: inputCity
            },

            success: function(result) {
                document.getElementById('DataHiddenField').value = result;

            },
            error: function (jqXHR, textStatus, errorThrown) {
                //omitted
            }
        });
    }
</script>

<asp:Button ID="Button1" runat="server" OnClick="Button1_OnClick" CssClass="top-buffer" Text="Compare Sites" />

<asp:HiddenField ID="DataHiddenField" runat="server" ClientIDMode="Static" />

代码隐藏

protected void Button1_OnClick(object sender, EventArgs e)
{
    RetrieveHtml();
}

private string RetrieveHtml(){
    Page.ClientScript.RegisterStartupScript(this.GetType(), "MyKey1", "LoadHtml('Alabama', 'AL', 'Program Awardee Data', 'Alabama Regional Medical Services', 'Birmingham');", true);
    return DataHiddenField.Value;
}

第一次点击按钮看不到隐藏字段内容是因为你的隐藏字段内容是在你点击按钮后在客户端填充的。 例如:

1º 客户端:用户点击 Button1

2º 服务器端:方法 RetrieveHtml 将 "order" 发送到客户端到 运行 LoadHtml 方法并提供参数。 此时 DataHiddenField.Value 在服务器端不可见,因为 LoadHtml 尚未执行。

3º 客户端:执行调用服务器端的 LoadHtml 省略 url。

4º服务器端:执行客户端省略的url和returns内容中的代码。

5º客户端:成功函数在DataHiddenField添加内容。 只有现在您才能在服务器端看到此内容。

Obs: DataHiddenField.Value 将始终与 RetrieveHtml 方法中的最后一次执行相关。

您能否在 Button1 时钟之前在浏览器中查看隐藏字段值?

您似乎对网页和 asp.net 网络表单的具体工作方式存在根本性误解。通常,当表单向服务器发送表单时,会发出对新页面的请求,服务器会对表单变量进行一些处理并发送新页面作为响应。此时客户端和服务器端断开连接。

让我们剖析您的代码:

<!-- Causes a postback to the server, no javascript run yet -->
<asp:Button ID="Button1" runat="server" OnClick="Button1_OnClick" CssClass="top-buffer" Text="Compare Sites" />

代码隐藏

private string RetrieveHtml(){
  /*Tells the page to run this script - WHEN IT NEXT LOADS*/
   Page.ClientScript.RegisterStartupScript(this.GetType(), "MyKey1", "LoadHtml('Alabama', 'AL', 'Program Awardee Data', 'Alabama Regional Medical Services', 'Birmingham');", true);
   /*Gets the value from the hidden field.*/
   /*On first click the above java-script HAS NOT RUN*/
   return DataHiddenField.Value;
}

/*After the server has finished work, it sends a new page response.*/
/*THEN the javascript runs*/

那么你需要做什么?

  • 运行 AJAX Api 页面加载调用。
  • 您可以 运行 回发前的 javasript。查看 OnClientClick
  • You can access the API server side and populate your data that way