【问题标题】:ASP.NET: How to retain values set on server controls with javascript after post backASP.NET:如何在回发后使用 javascript 保留在服务器控件上设置的值
【发布时间】:2019-12-28 04:28:13
【问题描述】:

我正在创建一个 ASP.NET 网站,它将进行一些计算(如果相关,它使用一些公式来计算退休计划)第一页,有一堆字段和标签,用户将输入数字,并且在按键上,我让 JavaScript 代码运行计算并用数字更新标签。然后我想将这些值传递到下一页,在那里它们将被解析并放入条形图中以进行摘要,但是我不断获得标签的默认值。我知道这与页面的回发有关。

我尝试使用隐藏字段来存储值,但它们也正在被重置。我看到的很多解决方案都与这里的类似,我也尝试过,但无济于事。

javascript代码如下:

function RATotal() {
    $('#lblRATotal').text("$" + (masterRANQAptERI + masterRAPTQptERI + 
                                 masterRARQAptERI + lumpsum).format());

    masterRATotal = (masterRANQAptERI + masterRAPTQptERI + masterRARQAptERI + lumpsum);

    document.getElementById('<%= hiddenRAtotal.ClientID %>').value = masterRATotal;
    document.getElementById('hideRAtotal').value = masterRATotal;
}

ASP/HTML:

<tr>
  <td>
    <span>Total After-Tax Equivalent Contribution: </span>
    <asp:Label runat="server" ID="lblRAATTotal" Text="$X.XX" Font-Bold="true" />
  </td>
  <td>
    <span>Total Pre-Tax Equivalent Contribution: 
      <asp:Label runat="server" ID="lblRAPTTotal" Text="$X.XX" Font-Bold="true" />
    </span>
  </td>
  <td>
    <span>Total Retirement Retirement Income:</span>
    <br />
    <asp:Label runat="server" ID="lblRATotal" Text="0.00" Font-Bold="true" />
    <asp:HiddenField runat="server" ID="hiddenRAtotal" EnableViewState="True" />
    <input id='hideRAtotal' name='hideRAtotal' type='hidden' />
  </td>
</tr>

C#代码如下

protected void btnSummary_Click(object sender, EventArgs e)
{
    string RAOtotal2 = hiddenRAtotal.Value.ToString();
    Session["RAOtotal"] = RAOtotal2
    Response.Redirect("ChartDataQuery.cshtml");
}

根据我读过的所有内容,这应该可以解决问题……但实际上,当我尝试使用它时,我只是得到一个“,”或 null。我已经扣除了“,”不是计算错误,因为当我将值设置为手动定义的字符串时,我也会得到一个“,”。我仍在学习这些东西,我将不胜感激!谢谢!

【问题讨论】:

  • 您是否尝试为 HiddenField 添加EnableViewState="True"
  • @JohnPete22 不,我没有,我只是尝试过,我得到的值为“”或 null。 :\
  • 只是为了澄清您提供的 ASP/HTML 代码,您的 .aspx 页面实际上是这样吗?换句话说,您是同时放入 asp:HiddenField 和输入隐藏字段,还是在此示例中您只是显示您正在放入 asp:HiddenField 并且当页面加载时它被替换通过输入隐藏字段?
  • 您是否尝试过在 RATotal 函数中执行 console.log(masterRATotal) 以确保它发送到隐藏字段的数字是正确的?
  • @DougF 我已经测试过该变量不为空。我也试过让它等于随机文本字符串,只是为了看看它是否会过来,但事实并非如此。是的,这就是它们的布局方式,我将它们放在代码开头部分的标签 (lblRATotal) 旁边。并且那个也显示了值,所以我知道它是正确的变量。我最初尝试解析该标签,但那时我遇到了当页面回发时它返回默认值的问题。我不能真正使用 if (!IsPostBack) 方法,因为我没有将那个号码存储在任何地方。

标签: javascript c# html css asp.net


【解决方案1】:

感谢@wazz 帮助我解决这个问题。

这条线,document.getElementById('&lt;%= hiddenRAtotal.ClientID %&gt;').value = masterRATotal; 是打破这一点的原因。我删除了这条线,它现在可以工作了。

【讨论】:

  • 好奇你为什么在使用 jQuery 访问上面几行的 DOM 元素时使用 document.getElementById ?
  • @sh1rts 正如我在我是 JavaScript 新手的问题中所说的那样。这是我用JS完全自己写的第一件事。原因是,当我使用$('#element') 方法调用它时,.value 似乎不起作用。所以这就是我使用这两种方法的原因。我不完全确定差异,我很想解释一下你为什么认为这是错误的,或者我该如何改进它!老实说,我从事 .NET 工作已经有一段时间了,但 JS 对我来说还是个新手。我不确定我是否完全理解 JS 和 jQ 之间的细微差别/差异,但我愿意接受您的反馈!谢谢!
  • 那是因为你需要在 jQuery 中使用 .val() - stackoverflow.com/questions/7322078/… - 对我来说这是关于一致性,如果你使用 .val() 你正在使用一种一致的方法来访问 DOM 元素值.
猜你喜欢
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
  • 2012-03-18
  • 2010-10-19
  • 1970-01-01
相关资源
最近更新 更多