مدقق ASP.NET لمقارنة اختلاف التاريخ ليس أكثر من 12 شهرًا

StackOverflow https://stackoverflow.com/questions/2309912

  •  22-09-2019
  •  | 
  •  

سؤال

لدي اثنين TextBox عناصر التحكم في تاريخ البدء وإدخال تاريخ الانتهاء. لا بد لي من التحقق من صحة تاريخ النهاية ليس أكبر من تاريخ البدء والفرق بين تاريخ البدء وتاريخ الانتهاء لا يزيد عن 12 شهرًا.

هل كانت مفيدة؟

المحلول

سيكون عليك استخدام أ CustomValidator لفعل هذا. في الخاص بك ، سيكون لديك شيء مثل هذا:

<asp:TextBox ID="txbStartDate" runat="server" />
<asp:TextBox ID="txbEndDate" runat="server" />
<asp:CustomValidator OnServerValidate="ValidateDuration"
    ErrorMessage="Dates are too far apart" runat="server" />

وفي الكود وراءك ، تحدد معالج التحقق من الصحة:

protected void ValidateDuration(object sender, ServerValidateEventArgs e)
{
    DateTime start = DateTime.Parse(txbStartDate.Text);
    DateTime end = DateTime.Parse(txbEndDate.Text);

    int months = (end.Month - start.Month) + 12 * (end.Year - start.Year);

    e.IsValid = months < 12.0;
}

لاحظ أن الرمز أعلاه عرضة لرمي الاستثناءات. ستحتاج إلى إضافة مصادقة إضافية للتحقق من أن التواريخ التي تم إدخالها يمكن تحليلها ، و ValidateDuration يجب تعديل الطريقة لتأكيد أن هؤلاء المدققين الآخرين قد مرت قبل إجراء اختباراتها الخاصة.

علاوة على ذلك ، قد ترغب بعد إضافة مدقق آخر لاختبار أن تاريخ النهاية في الواقع أكبر (أو يساوي) تاريخ البدء. من المحتمل أن يؤدي كسر هذه القاعدة إلى رفع رسالة خطأ التحقق من الصحة.

<asp:CompareValidator Operator="GreaterThanEqual" Type="Date"
    ControlToValidate="txbEndDate" ControlToCompare="txbStartDate"
    ErrorMessage="Let's get started first!" runat="server" />

نصائح أخرى

كما يمكنك استخدام TimePan:

        DateTime start = DateTime.Parse(DateBegin.Text);
        DateTime end = DateTime.Parse(DateEnd.Text);
        TimeSpan ts = end - start;
        e.IsValid = ts.Days < 365;

سريع وسهل: اثنان من المدققين ، أحدهما مدقق مقارنة (يقارن كل من عناصر التحكم) ، ومقحة مخصصة مع طريقة من جانب الخادم للتحقق من تاريخ الانتهاء.

ولماذا لا تدور حول ذلك

 DateTime start = DateTime.Parse(DateBegin.Text);
 DateTime end = DateTime.Parse(DateEnd.Text);
 e.IsValid = (end-start).Years <1;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top