Значение пользовательского элемента управления потеряно в коде позади файла при обратной передаче - PullRequest
0 голосов
/ 08 января 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...