سؤال

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

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

هل يعرف أي شخص بعض البرامج التعليمية الحديثة التي يمكن أن تجعلني أبدأ في بناء موثق نموذج مخصص؟

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

المحلول

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

public class CustomModelBinder : DefaultModelBinder {
    public override object BindModel(ControllerContext controllerContext, 
        ModelBindingContext bindingContext) {

        NameValueCollection form = controllerContext.HttpContext.Request.Form;
        //get what you need from the form collection

        //creata your model
        SomeModel myModel = new SomeMode();
        myModel.Property = "value";
        //or add some model errors if you need to
        ModelStateDictionary mState = bindingContext.ModelState;
        mState.Add("Property", new ModelState { });
        mState.AddModelError("Property", "There's an error.");

        return myModel; //return your model
    }
}

وعملك:

public ActionResult Contact([ModelBinder(typeof(CustomModelBinder))]SomeModel m){
    //...
}

هل كان هذا هو نوع المعلومات التي تبحث عنها؟

نصائح أخرى

ألق نظرة على عدة أمثلة على مجلدات نموذج MVC مخصصة على مدونتي.

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