用javascript填充后,文本框为空

本文关键字:文本 javascript 填充 | 更新日期: 2023-09-27 17:53:51

我用下面的代码创建了一个文本框:

<div style="clear:left;">
    <asp:TextBox TextMode="MultiLine" runat="server" ID="selectText" ReadOnly="true" Width="560px" Height="50px"></asp:TextBox>
</div>

我用下面的代码填充它:

elSelText.value = elSelText.value.substr(0, position) + chosenoption2.value + " ";

然后我尝试在文本框发送值到服务器,但它是空的!

protected void btnUseSelectClick(object sender, EventArgs e)
    {
        sourceDetails.SelectCommand += " and " + selectText.Text;
        Session["FilterSelectCommand"] = sourceDetails.SelectCommand;
        tableResults.DataBind();
    }

根据建议,我添加了AutoPostBack="true":

<div style="clear:left;">
    <asp:TextBox TextMode="MultiLine" runat="server" AutoPostBack="true" ID="selectText" ReadOnly="true" Width="560px" Height="50px"></asp:TextBox>
</div>

但是没有用

用javascript填充后,文本框为空

虽然这对我来说是新闻,但似乎ReadOnly属性没有跟踪来自客户端的更改。如果您想要"只读"功能,但仍然在服务器上获得该值,请在Page_Load方法中放入以下内容:

selectText.Attributes.Add("readonly", "readonly");

并删除<asp:TextBox>标签中的ReadOnly(和AutoPostBack)属性。

(从:http://aspadvice.com/blogs/joteke/archive/2006/04/12/16409.aspx和http://forums.asp.net/t/1467081.aspx -这是一个相当快找到与谷歌)

可能是ViewState的问题。尝试在页面加载事件中添加Page.IsPostBack检查,如下所示:

If(!Page.IsPostBack)
{
    // Data binding for the first call
}

我认为这是由于ReadOnly: ASP。Net注册在向您发送该页时哪些控件是只读的。

这些控件的值在发回时被丢弃,并且它被重新获取(我相信是从ViewState)。

一个解决这个问题的方法不是在aspx页面上设置readonly="true",而是用$(document).ready(your_function_here();)(如果你使用jQuery)或用body onLoad事件来设置它。