用户控制值在回发中的文件后面的代码中丢失

时间:2019-01-07 21:06:42

标签: asp.net webforms user-controls postback

我有一个自定义的日期选择器,用户可以在其中选择日期并提交页面。以下是用户控件的代码 .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。在这一点上,我必须刷新页面以使其正常工作。 我不确定这里缺少什么。

0 个答案:

没有答案