c# - شرح - كتاب asp.net mvc عربي




كيفية RedirectToAction في ASP.NET MVC دون فقدان بيانات الطلب (4)

باستخدام ASP.NET MVC هناك حالات (مثل تقديم النموذج) قد تتطلب RedirectToAction .

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

بما أنني أطلب من النموذج أن يحتوي على بيانات POST الأصلية ، لراحة المستخدم ، وكذلك لأغراض التحقق من الصحة ، كيف يمكنني تمرير البيانات من خلال RedirectToAction() ؟ إذا استخدمت المعلمة viewData ، فسيتم تغيير معلمات POST إلى معلمات GET .


ألق نظرة على MVCContrib ، يمكنك القيام بذلك:

using MvcContrib.Filters;

[ModelStateToTempData]
public class MyController : Controller {
    //
    ...
}

إذا كنت تريد تمرير البيانات إلى الإجراء المعاد توجيهه ، فالطريقة التي يمكنك استخدامها هي:

return RedirectToAction("ModelUpdated", new {id = 1});
// The definition of the action method like  public ActionResult ModelUpdated(int id);

ضع في اعتبارك أن TempData يخزن مجموعة النموذج في جلسة. إذا كنت لا تحب هذا السلوك ، فيمكنك تطبيق واجهة ITempDataProvider الجديدة واستخدام بعض الآليات الأخرى لتخزين بيانات temp. لن أفعل ذلك إلا إذا علمت حقيقة (عن طريق القياس والتنميط) أن استخدام حالة الجلسة يؤذيك.


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

var form = new FooForm();

if (request.UrlReferrer == request.Url)
{
     // Fill form with previous request's data
}

if (Request.IsPost())
{
     if (!form.IsValid)
     {
         ViewData["ValidationErrors"] = ...
     } else {
         // update model
         model.something = foo.something;
         // handoff to post update action
         return RedirectToAction("ModelUpdated", ... etc);
     }
}

// By default render 1 view until form is a valid post
ViewData["Form"] = form;
return View();

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

عند النشر إلى هذا الإجراء ، إذا كان صحيحًا ، فسيتم نقل التحكم فيه إلى إجراء آخر.

أحاول أن أجعل هذا النمط سهلاً في إطار التحقق من الصحة .net ونحن نبني دعمًا لـ MVC.





asp.net-mvc