Как говорили другие, ReadOnly = "True" сломает механизм обратной передачи.
Я полагаю, что вы можете обойти это в своем коде, обратившись к объекту Request непосредственно во время PageLoad:
//assuming your textbox ID is 'txtDate'
if(Page.IsPostBack)
{
this.txtDate.Text = Request[this.txtDate.UniqueID];
}
Другой вариант - разрешить отправку элементов управления отключенным элементам в форме, но это является проблемой безопасности, поскольку поля, доступные только для чтения, измененные с помощью сценария, потенциально могут вернуться:
<form id="MyForm" runat="server" SubmitDisabledControls="True">
..
</form>
http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlform.submitdisabledcontrols.aspx
Я не уверен, что это свойство влияет на элементы управления ReadOnly (vs Enabled = "False"), но стоит попробовать.
И, наконец, я столкнулся с той же проблемой, с которой вы столкнулись несколько лет назад, и из того, что я помню, есть разница между использованием ввода html, помеченного как readonly и runat = "server", и реальной серверной стороной. контроль, где ReadOnly = "true".
Я чувствую, что делаю:
<input type="text" readonly="readonly" runat="server" id="myTextBox" />
, возможно, все еще позволял проходить данным, хотя в коде позади вы должны рассматривать элемент управления как HtmlInputText или HtmlGenericControl против TextBox. Вы по-прежнему можете получить доступ к нужным вам свойствам.
Всего несколько идей ...