سؤال

منعش وModelState

ومرحبا، لدي سؤال حول ModelState في وحدة تحكم ASP.NET MVC.

وعندما يحدد المستخدم خيار معين من وجهة النظر، وتاريخ بداية وتاريخ نهاية ل "شهادة" سيتم تعيين استنادا إلى تواريخ أخرى تم إدخالها.

والمشكلة مع هذا هي تواريخ الشهادات تعود فارغة كما وصفنا CertificationMetaData specifys الحقول كما [مطلوب] لذلك ModelState غير صالح في أقرب وقت الأحمال العمل.

وإزالة الأخطاء ModelSate يدويا يسمح هذا العمل ولكني أتساءل عما اذا كان هناك طريقة أفضل للقيام بذلك؟ هل هناك طريقة لتحديث ModelState؟ يجب أن تجعل الحقول غير المطلوبة؟ أو ينبغي أن إضافة قيمة التاريخ من وجهة النظر مع جافا سكريبت؟

public ActionResult Create(FormCollection fc, Certification certification, Absence absence)
{
    if (certification.CertificationTypeID == 1)
    {
        certification.CertificationStartDate = absence.StartDate;
        certification.CertificationEndDate = absence.StartDate.AddDays(7);
        this.ModelState.Remove("CertificationStartDate");
        this.ModelState.Remove("CertificationEndDate");
    }

    if (this.ModelState.IsValid)
    {
        // save
        return RedirectToAction("Index");
    }
     return View();
}

وأيضا كما ترون لقد ضمني قيمة ID لنوع الشهادة. ما هو أفضل وسيلة لمقارنة القيم مع قيم جدول البحث؟ هو التعداد أفضل طريقة للذهاب؟

والشكر

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

المحلول

ومن الواضح أن هذا هو شيء شخصي، لكنني لن إزالة رسائل الخطأ.

إذا كنت ذاهبا لحل بسيط ثم أود أن إزالة [مطلوب] سمة وإضافة رمز التحقق من الصحة إلى وحدة تحكم لإضافة الخطأ إذا كانت تواريخ مفقود أو مجموعة منهم لقيمة بديلة إذا كان من النوع الصحيح.

إذا كنت ذاهبا لإيجاد حل أكثر تعقيدا وأود أن وضع المصادقة على مستوى النموذجي. ربما فئة أساسية أو واجهة أن هذا النموذج يجب أن تنفذ. وهناك فئة ValidationHelper مع أسلوب ثابت التحقق من صحة (كائن IValidate) من شأنها أن تفقد ValidationAttributes ويدعو طريقة التحقق من صحة على نموذج. ثم فإنه يعود مجموعة من ValidationErrors. ثم ModelBinder العرف أن تكون مكتوبة أن يفهم التحقق من صحة نموذج وخرائط هذه الأخطاء ModelState.

نصائح أخرى

والنهج التالية ينعش دولة نموذجية ويسمح لك للحفاظ على تصميم النموذج الخاص بك بما يتفق مع [مطلوب] سمات الخ.

في حالتي أريد طراز بي أن يكون حقل مطلوب أن المستخدمين المستوى العادي باستخدام API لا يمكن أن تتغير، لذلك لقد فعلت ذلك:

ModelState.Remove("ChangeDate");
ModelState.Add("ChangeDate", new ModelState());
ModelState.SetModelValue("ChangeDate", new ValueProviderResult(club.ChangeDate, DateTime.Now.ToString(), null));

وبهذه الطريقة لا تحتاج إلى إزالة الحقول المطلوبة، وأنت أيضا لا تحتاج إلى توفير تاريخ في جافا سكريبت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top