我有一个ASPX网络表单,它接受一些数据,只发送一封电子邮件。它已经工作了很多年,但我只是添加了一个新字段,我无法将Text值转移到编写电子邮件的c#代码中。
不同之处在于,新字段是通过jQuery/JSON查找填充的,并且是只读的。jQuery部分运行良好。
有问题的文本框:
<asp:TextBox ID="autoRegion" Width="30" ReadOnly="true" onfocus="this.blur();" TabIndex="-1" CssClass="disabledInput" Value="" runat="server" />
工作文本框:
<asp:TextBox ID="FName" MaxLength="40" TabIndex="1" runat="server" />
<asp:TextBox ID="LName" MaxLength="40" TabIndex="3" runat="server" />
电子邮件正文内容的C#变量:
objMM.Body += "<table><tr><td>" +
LName.Text + "</td><td>" + FName.Text.ToUpper() + "</td><td>" +
streetAddress1.Text + "</td><td>" + city.Text.ToUpper() + "</td><td>" +
state.SelectedItem.Text + "</td><td>" + zip.Text + "</td><td>" + autoRegion.Text +
"</td></tr></table>";
所有其他字段都在工作,但autoRegion.Text
不工作。
我还尝试过用Request.Form["autoRegion"]
填充一个变量,并使用该变量代替autoRegion.Text
,但这也不起作用。
如有任何帮助,我们将不胜感激。
如果我没记错的话,只读项目不会将其值发布回服务器,因为没有任何原因,因为它们无法更改。
查看此链接:当通过javascript更改客户端值时,ASP.NET文本框在回发后丢失值。回发似乎只推送Disabled或ReadOnly的TextBox的ViewState数据。因为您是通过客户端加载值的,所以在ViewState中没有TextBox的任何内容。
有几种不同的工作,但我想尝试这个问题的答案:
protected void Page_Load(object sender, EventArgs e)
{
TextBox1.Attributes.Add("readonly", "readonly");
}
除了应用此代码外,还需要从aspx页面的TextBox中删除ReadOnly="true"属性。
Mark Fitzpatrick是对的,问题是您将TextBox设置为ReadOnly,这意味着它的值不会在ViewState中持久化。
这里有一个潜在的解决方法:禁用的文本框丢失视图状态
编辑:使用HTML';readonly="只读";只读"';与JavaScript';element.readOnly=true';
您应该对进行一些更改
-
删除文本框中的只读属性,如下所示
- 此属性添加页面加载,如下所示protected void Page_Load(对象发送方,EventArgs e){autoRegion.Attributes.Add("只读","只读");}