2013-06-25 329 views
1

我有一个文本框(txtShipmentDate),它使用从.aspx文件中的弹出日历中选择的值填充。Textbox.text返回空白

<tr> 
    <td align="right" valign="middle" width="125"> 
     Shipment Date: 
    </td>          
    <td align="left" valign="middle"> 
     <asp:TextBox Runat="server" ReadOnly="true" Width="75" 
      ID="txtShipmentDate" CssClass="textbox"></asp:TextBox> 
     <a title="Select Ship Date" onclick="if(self.gfPop)gfPop.fPopCalendar(document.forms[0].txtShipmentDate);return false;" 
href="javascript:void(0)"> 
     <IMG class="PopcalTrigger" height="19" alt="" src="/TOrders/calendarxp/themes/xp/calbtn.gif" width="34" align="absMiddle" border="0"></a> 
    </td> 
</tr> 

该文本框会正确填充。

但是当我尝试在文本框中访问该值在单击提交按钮时,使用

 If txtShipmentDate.Text.Length > 0 Then oShippingDate = Convert.ToDateTime(txtShipmentDate.Text) 

在texbox值为空。提交之前没有别的事情发生。所有其他文本框保留其值。

+1

我会说'ReadOnly =“true”'在这里是有罪的,试图删除它只是为了测试目的 –

+0

你是通过客户端JavaScript填充该文本框? –

回答

1

由于安全防范措施ReadOnly字段在回发时不会保留其值。如果您需要阻止用户输入此字段并仍将该值发回 - 请勿设置文本框的ReadOnly属性。相反,给它通过CSS一个只读的外观,然后阻止用户输入直通类似

txtShipmentDate.Attributes("onclick") = "this.blur();" 

(您可能要处理“ONSELECT”和“onpaste”为好)。通过这种方式防止了用户输入,从而为用户提供完整的ReadOnly字段外观,并且仍将其值重新发回。