我有一个自定义的日期选择器,用户可以在其中选择日期并提交页面。以下是用户控件的代码 .ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="RequestDateControl.ascx.cs" Inherits="Proj.UI.UserControls.RequestControls.RequestDateControl" %>
<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="asp" %>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" >
<ContentTemplate>
<table width="">
<tr>
<td>
<asp:Label runat="server" Text="*" ForeColor="Red" ID="reqLabel" EnableTheming="false" ></asp:Label>
</td>
<td>
<asp:Label ID="CaptionLabel" runat="server" Text="Needed By" Width="130px"></asp:Label>
</td>
<td>
<asp:TextBox ID="RequestDate" runat="server" Width="200px" onchange="UpdateControls(this);" ></asp:TextBox>
</td>
<td>
<asp:CalendarExtender ID="TextBox1_CalendarExtender" runat="server"
Enabled="True" TargetControlID="requestDate">
</asp:CalendarExtender>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage=" Input is required."
ControlToValidate="requestDate" ForeColor="Red">!</asp:RequiredFieldValidator>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
和.ascx.cs
public partial class RequestDateControl : BaseUserControl
{
public string Text
{
get
{
if (ViewState["RequestDate"] == null)
ViewState["RequestDate"] = this.RequestDate.Text;
return ViewState["RequestDate"] as string;
}
set
{
ViewState["RequestDate"] = value;
this.RequestDate.Text = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
this.RequestDate.Attributes.Add("readonly", "readonly");
this.RequestDate.Style.Add("color", "gray");
this.RequiredFieldValidator2.ErrorMessage = Key + " is required!";
}
protected void ChangeButton_Click(object sender, EventArgs e)
{
}
public string DisplayNames
{
get { return this.CaptionLabel.Text; }
set { this.CaptionLabel.Text = value; }
}
public bool IsRequired
{
get{
return this.RequiredFieldValidator2.Enabled;
}
set {
this.RequiredFieldValidator2.Enabled = value;
if(value.Equals(false))
this.reqLabel.Style.Add("visibility", "hidden");
}
}
public string Key { get; set; }
}
在我使用此控件的页面上,此控件仅在首次加载和提交页面时才为Text属性获取正确的回发值。在下一次在同一页面上提交时,控件仅使用第一次回发中的值。
例如: 如果我有abc.aspx,并且第一次提交该页面,且日期为01/07/2019。它会正确保存。然后,如果我将日期更改为01/6/2019并提交,下次它将日期保存为01/7/2019。在这一点上,我必须刷新页面以使其正常工作。 我不确定这里缺少什么。