填写javascript后,文本框为空

时间:2013-01-17 14:47:31

标签: c# javascript asp.net

我通过以下代码创建文本框:

<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>

但它没有帮助

3 个答案:

答案 0 :(得分:2)

虽然这对我来说是新闻,但似乎ReadOnly属性并未跟踪客户端的更改。如果您想要“只读”功能但仍然可以获得服务器上的值,请在Page_Load方法中添加以下内容:

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

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

(来自:http://aspadvice.com/blogs/joteke/archive/2006/04/12/16409.aspxhttp://forums.asp.net/t/1467081.aspx - 这是Google的一个相当快的发现)

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我认为这是由于ReadOnly:ASP.Net寄存器在向您发送页面时只读取哪些控件。

回发时会丢弃这些控件的值,并且它会被重新设置(我相信ViewState)。

对此的解决方法是不在aspx页面上设置readonly="true",而是使用$(document).ready(your_function_here();)(如果您使用的是jQuery)或使用正文onLoad事件设置它。 / p>