2013-08-29 2 views
0

Я создал пользовательский элемент управления, который имеет 2 элемента управления датами (дата начала и дата окончания). Теперь на моей странице aspx я использую один и тот же пользовательский элемент управления дважды с id как родительский и дочерний. Теперь я хочу, чтобы даты в дочернем элементе управления пользователя находились в пределах дат, установленных в родительском элементе управления пользователя.Проверка даты контроля пользователя Asp.NET

Пожалуйста, обратитесь к приведенному ниже фрагменту кода, я хочу, чтобы выбранные даты находились в пределах дат.

ASCX Страница:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="EffectiveDate.ascx.cs" 
    Inherits="UserControlDemo.EffectiveDate" %> 
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxtoolkit" %> 
<asp:ScriptManager runat="server" ID="scriptmanger1" EnablePageMethods="true"> 
</asp:ScriptManager> 
<table id="Table5" width="99%" cellspacing="5"> 
    <tr> 
     <td valign="middle" width="20%"> 
      <asp:Label ID="Label4" runat="server" Style="white-space: nowrap;" Text="Effective Start Date"></asp:Label> 
     </td> 
     <td valign="middle"> 
      <asp:TextBox ID="attPrdStartdate" runat="server"></asp:TextBox> 
      <asp:Label ID="Label8" runat="server" ForeColor="Red" Text="*"></asp:Label> 
      <asp:ImageButton ID="Image3" runat="server" ImageUrl="/Images/CalendarImage.png" 
       Style="margin-bottom: -5px" /> 
      <ajaxtoolkit:FilteredTextBoxExtender ID="FilteredTextBoxExtender5" runat="server" 
       TargetControlID="attPrdStartdate" ValidChars="1234567890/" /> 
      <ajaxtoolkit:CalendarExtender ID="CalendarExtender3" runat="server" TargetControlID="attPrdStartdate" 
       PopupButtonID="Image3" Format="MM/dd/yyyy"> 
      </ajaxtoolkit:CalendarExtender> 
      <asp:CompareValidator ID="CompareValidator5" runat="server" ControlToValidate="attPrdStartdate" 
       Display="Dynamic" ErrorMessage="Invalid Date" ForeColor="Red" Operator="DataTypeCheck" 
       Type="Date" Style="font-size: smaller"> 
      </asp:CompareValidator> 
      <asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="attPrdStartdate" Type="Date" 
       Display="Dynamic" ErrorMessage="Dates out of range" ForeColor="Red" EnableClientScript="False"></asp:RangeValidator> 
     </td> 
    </tr> 
    <tr> 
     <td valign="middle"> 
      <asp:Label ID="Label5" runat="server" Style="white-space: nowrap;" Text="Effective End Date"></asp:Label> 
     </td> 
     <td valign="middle"> 
      <asp:TextBox ID="attPrdEnddate" runat="server"></asp:TextBox> 
      <asp:Label ID="Label9" runat="server" ForeColor="Red" Text="*"></asp:Label> 
      <ajaxtoolkit:FilteredTextBoxExtender ID="FilteredTextBoxExtender6" runat="server" 
       TargetControlID="attPrdEnddate" ValidChars="1234567890/" /> 
      <ajaxtoolkit:CalendarExtender ID="CalendarExtender4" runat="server" TargetControlID="attPrdEnddate" 
       PopupButtonID="Image4" Format="MM/dd/yyyy"> 
      </ajaxtoolkit:CalendarExtender> 
      <asp:ImageButton ID="Image4" runat="server" ImageUrl="/Images/CalendarImage.png" 
       Style="margin-bottom: -5px" /> 
      <asp:CompareValidator ID="CompareValidator6" runat="server" ControlToValidate="attPrdEnddate" 
       Display="Dynamic" ErrorMessage="Invalid Date" ForeColor="Red" ControlToCompare="attPrdStartdate" 
       Operator="GreaterThan" Type="Date" Style="font-size: smaller"> 
      </asp:CompareValidator> 
      <asp:RangeValidator ID="RangeValidator2" runat="server" ControlToValidate="attPrdEnddate" Type="Date" 
       Display="Dynamic" ErrorMessage="Dates out of range" ForeColor="Red" EnableClientScript="False"></asp:RangeValidator> 
     </td> 
    </tr> 
    <tr> 
     <td colspan="2"> 
      <asp:Label runat="server" ID="errlblBaseln" Text="" ForeColor="Red" Font-Size="smaller"></asp:Label> 
     </td> 
    </tr> 
</table> 

ASCX Код За:

namespace UserControlDemo 
{ 
    public partial class EffectiveDate : System.Web.UI.UserControl 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      RangeValidator1.MaximumValue = endDate.ToShortDateString(); 
      RangeValidator1.MinimumValue = startDate.ToShortDateString(); 
      RangeValidator2.MaximumValue = endDate.ToShortDateString(); 
      RangeValidator2.MinimumValue = startDate.ToShortDateString(); 

     } 
     private DateTime startDate; 
     private DateTime endDate; 

     public DateTime StartDate 
     { 
      get { return startDate; } 
      set { startDate = value; } 
     } 
     public DateTime EndDate 
     { 
      get { return endDate; } 
      set { endDate = value; } 
     } 
    } 
} 

мой ASPX страница:

<uc:EfectiveDate ID="MyDates" runat="server" StartDate="01/01/2013" EndDate="12/12/2013" /> 
+0

Что такое _date controls_? Пожалуйста, покажите нам, что у вас есть. Кроме того, что означает родитель/ребенок в этом контексте? –

+0

скажем, предположим, что пользователь выбирает дату начала как 1/1/2013, а дату окончания - 12/12/2014. Таким образом, в контроле над дочерним элементом пользователь должен иметь возможность выбирать дату только между 1/1/2013 по 12/12/2014 –

+0

Покажите свой код * .aspx здесь –

ответ

0

Я думаю, что вы пытаетесь сделать что-то вроде этого.

Родитель

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Parent.ascx.cs" Inherits="StackOverFlow.Parent" %> 
<table> 
    <tr> 
     <td>Parent Start Date </td> 
     <td> 
      <asp:TextBox runat="server" ID="txtStartDate" /> 
     </td> 
    </tr> 
    <tr> 
     <td>Parent End Date </td> 
     <td> 
      <asp:TextBox runat="server" ID="txtEndDate" /> 
     </td> 
    </tr> 
</table> 

Детский

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Child.ascx.cs" Inherits="StackOverFlow.Child" %> 
<table> 
    <tr> 
     <td>Child Start Date </td> 
     <td> 
      <asp:TextBox runat="server" ID="txtStartDate" /> 
     </td> 
    </tr> 
    <tr> 
     <td>Child End Date </td> 
     <td> 
      <asp:TextBox runat="server" ID="txtEndDate" /> 
     </td> 
    </tr> 
</table> 

Ваша страница

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="StackOverFlow.WebForm1" %> 

<%@ Register TagPrefix="p" Src="~/Parent.ascx" TagName="Parent" %> 
<%@ Register TagPrefix="c" Src="~/Child.ascx" TagName="Child" %> 
<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <div> 
      <table> 
       <tr> 
        <td> 
         <p:Parent ID="parent" runat="server"></p:Parent> 
        </td> 

       </tr> 
       <tr> 
        <td> 
         <c:Child ID="child" runat="server"></c:Child> 
        </td> 
       </tr> 
       <tr><td> 
        <asp:Button Text="Compare" ID="btnCompare" runat="server" OnClick="btnCompare_Click" /></td></tr> 
      </table> 
     </div> 
    </form> 
</body> 
</html> 

Код за

protected void btnCompare_Click(object sender, EventArgs e) 
    { 
     TextBox txtParentStartDate = (TextBox)parent.FindControl("txtStartDate"); 

     if (txtParentStartDate!=null) 
     { 
      DateTime dtParentStartDate = Convert.ToDateTime(txtParentStartDate.Text.Trim()); 
     } 

     //likewise get other dates and compare 
    } 

Надеется, что это поможет.

+0

Большое спасибо за все усилия Ур. очень ценю. Я изменил вопрос, пожалуйста, взгляните и предложите. Я пытаюсь добиться этого с помощью валидатора диапазона. –

+1

@AmitAgarwal попробуйте использовать пользовательский валидатор вместо использования проверки диапазона. PLS ссылаются на это http://asp.net-tutorials.com/validation/custom-validator/ – Roshe

+0

Спасибо, попробуем это, но мы не можем сделать это, используя диапазон, тип даты cos поддерживается в диапазоне, и я хочу, чтобы мой даты должны находиться в определенном диапазоне. –

Смежные вопросы