У меня есть пользовательский селектор даты, где пользователь выбирает свою дату и отправляет страницу. ниже приведен код для пользовательского элемента управления
.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 в первый раз. это сохраняет правильно. Затем, если я изменю дату на 6/6/2019 и отправлю это, в следующий раз это все еще сохраняет дату как 7/7/2019. На данный момент, я должен обновить страницу, чтобы она работала правильно.
Я не уверен, чего здесь не хватает.