我通过以下代码创建文本框:
<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>
但它没有帮助
答案 0 :(得分:2)
虽然这对我来说是新闻,但似乎ReadOnly
属性并未跟踪客户端的更改。如果您想要“只读”功能但仍然可以获得服务器上的值,请在Page_Load
方法中添加以下内容:
selectText.Attributes.Add("readonly", "readonly");
并移除ReadOnly
标记中的AutoPostBack
(和<asp:TextBox>
)属性。
(来自:http://aspadvice.com/blogs/joteke/archive/2006/04/12/16409.aspx和http://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>