2013-01-17 114 views
1

填充后,我通过这段代码创建文本框:文本框为空,用JavaScript

<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 = “真”:

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

,但它并没有帮助

+2

只是一个猜测,但并移除'只读=“真”'有所作为? –

+0

文本框的值为空,因为服务器不知道它已更改。服务器需要以某种方式得到通知。通常,这是通过全部或部分回发完成的。 – Daniel

+1

@Doc我认为这就是'protected void btnUseSelectClick(){}'是 – Ian

回答

2

虽然这是我的新闻,但似乎ReadOnly属性不记录客户端的变化。如果你想在“只读”的功能,但仍然可以在服务器上的价值,把你的Page_Load方法如下:

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

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

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

0

也许ViewState中的问题。尝试添加Page.IsPostBack检查在这样的页面加载事件:

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

这不是真的。 – user1848942

0

我相信这是由于只读:发送你的页面时,ASP.Net登记哪些控件是只读的。

这些控件的值在回发时被丢弃,并且它是regotten(来自ViewState,我相信)。

解决方法是在aspx页面上不设置readonly="true",但将其设置为$(document).ready(your_function_here();)(如果您使用的是jQuery)或onLoad正文事件。

+0

谁低估了这个,请小心解释一下? – Destrictor