سؤال

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

هل هذا ممكن للقيام به وهل هناك أي آثار جانبية واضحة عن طريق القيام بذلك؟

ما أريد تحقيقه هو أن وحدة التحكم تحصل دائمًا على أوامر صالحة ، لذلك لا أحتاج إلى التحقق من نموذج. iSvalId () في طريقة الإجراء.

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

المحلول

ما تحاول القيام به يبدو جيدًا ، لكنه لن ينجح. هناك الكثير من القيود.

  1. عادة ، يمكن فقط لجهاز التحكم تحديد مكان إعادة التوجيه في حالة وجود خطأ. يمكنك استخدام سمات إضافية مثل [onerror ("Action")] ولكن هذا يبدو وكأنه حلول.
  2. الشكل لا ينشر الكل بيانات. على سبيل المثال ، قوائم المنسدلة ، يجب ملء القيم المساعدة بواسطة وحدة التحكم. ربما يمكنك استخدام مرشحات الإجراءات لهذا ولكن هذا يبدو مرة أخرى وكأنه اختراق.

يمكنك إعداد Filter Global Action (على وحدة التحكم الأساسية) التي ستتحقق من أخطاء النماذج (التي مجموعات الموثق) وإعادة التوجيه (الإعداد .result). ولكن هذا معقول ويتطلب الكثير من "رمز" إضافي - السمات ، وما إلى ذلك ، من الصعب تتبعها وتواصلها مع منطق التطبيق الحقيقي. ويصبح مقيدًا جدًا قريبًا (انظر قانون التجريد المتسرب) ، عندما لا تحتاج فقط إلى اسم إجراء بسيط عند إعادة توجيه الأخطاء ، إلخ.

هذا يبدو كثير أبسط عند القيام به مثل هذا:

public ActionResult PostAction(ViewModel data)
{
   if (!ModelState.IsValid)
      return View("GetAction", data.WithDropDownList(repository.GetProducts()));

}

في المثال أعلاه ، يتمتع وحدة التحكم بالتحكم في سير العمل ، تمامًا كما ينبغي. كما أن لديها حرية في أداء التحقق/الإعداد الإضافي. لا يزال بإمكانك استخدام أكبر قدر ممكن من البنية التحتية - المجلدات النموذجية لتوفير أخطاء النموذج ، إلخ - ولكن يجب أن يكون لدى وحدة التحكم فقط القرار النهائي بشأن المدخلات والمخرجات.

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