TextBox值未分配给asp.net中的变量

时间:2013-09-13 15:20:05

标签: c# javascript asp.net

Java脚本

function outputtax() 
 { 
 var tamount = parseFloat(document.getElementById('<%=txtpsubtotal.ClientID%>').value);
 var cash = parseFloat(document.getElementById('<%=txtpdiscount.ClientID%>').value);

 if (isNaN(tamount) != true && isNaN(cash) != true && isNaN(tax) != true)
  {
    document.getElementById('<%=txtPtotalamout.ClientID%>').value =
       Math.round(parseFloat(document.getElementById('<%=txtpsubtotal.ClientID%>').value)
  - parseFloat(document.getElementById('<%=txtpdiscount.ClientID%>').value))              
      return false;
    }

  }

<asp:TextBox ID="txtPtotalamout" runat="server" ReadOnly="true">
                                          </asp:TextBox>

.CS

objsupplyPL.totalamount = Convert.ToDouble(txtPtotalamout.Text.ToString());

值显示在文本框上,但是当我点击保存按钮txtptotalamountnull值。如果我放置了readonly="false",它的工作正常。

2 个答案:

答案 0 :(得分:2)

您希望能够保存“txtPtotalamout”的结果,但您不希望它是可编辑的。

你可以使用

<div id="PTotalAmount"><asp:Label id="PTotalAmount" runat="server" /></div>
<asp:HiddenField ID="hPTotalAmount" runat="server" />

要显示它,并在javascript中更新该DIV的内容和隐藏字段。

然后,您可以在加载表单时显示该DIV中的总金额(并填充隐藏字段)。如果需要,您甚至可以将DIV格式化为文本框。

答案 1 :(得分:2)

来自http://codecorner.galanter.net/2009/10/09/postback-disabled-textbox/

假设您在ASP.NET应用程序中将TextBox控件的属性ReadOnly设置为True(或Enabled为False)以防止用户直接输入数据。但是您仍然希望通过客户端JavaScript更新该文本框的值。发生了什么,价值可以更新。但在回发到服务器期间 - 惊喜,惊喜! - 新值不会持续存在。这是出于安全预防措施 - 如果不打算更改值 - 则不允许更改。但是有一种解决方法。

诀窍是 - 保持ReadOnly = FalseEnabled = True并模拟他们的行为。在服务器端代码中添加以下行:

TextBox1.Attributes["onclick"] = "this.blur();"

其中TextBox1是您的文本框控件。这一行的作用是在文本框中添加客户端行为。一旦用户尝试单击文本框,焦点就会立即丢失,从而阻止用户输入数据,使文本框基本上是只读的。为了进一步起作用,您可以将texbox的背景设置为“LightGray”,使其显示为禁用。