سؤال

أود أن أعرف كيف يمكنني ربط قيم النموذج الخاصة بي لعرض نموذجي مكتوب بشدة من مربع متعدد الاستخدامات.

من الواضح أنه يؤدي النموذج إلى إرسال مربع متعدد المحدد، سيقوم بتقديم سلسلة دائمة من قيمي المحددة ... ما هي أفضل طريقة لتحويل هذه السلسلة من القيم مرة أخرى إلى قائمة الكائنات المرتبطة بتحديث نموذجي؟

public class MyViewModel {
    public List<Genre> GenreList {get; set;}
    public List<string> Genres { get; set; }
}

عند تحديث نموذجي داخل وحدة التحكم، أنا أستخدم UpdateModel مثل أدناه:

Account accountToUpdate = userSession.GetCurrentUser();
UpdateModel(accountToUpdate);

ومع ذلك، أحتاج إلى ما أحصل بطريقة أو بأخرى على القيم من السلسلة مرة أخرى إلى كائنات.

أعتقد أنه قد يكون لديه ما يجب القيام به مع المجلدات النموذجية ولكن لا يمكنني العثور على أي أمثلة واضحة جيدة لكيفية القيام بذلك.

شكرا!! بول

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

المحلول

أنت تصحيح أن بيندر النموذج هو الطريق للذهاب. جرب هذا...

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;

[ModelBinder(typeof(MyViewModelBinder))]
public class MyViewModel {
    ....
}

public class MyViewModelBinder : DefaultModelBinder {
    protected override void SetProperty(ControllerContext context, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value) {
        if (propertyDescriptor.Name == "Genres") {
            var arrVals = ((string[])value)[0].Split(',');
            base.SetProperty(context, bindingContext, propertyDescriptor, new List<string>(arrVals));
        }
        else
            base.SetProperty(context, bindingContext, propertyDescriptor, value);
    }
}

نصائح أخرى

الدفع Phil Haacks Plog Post حول هذا الموضوع. اعتدت ذلك كأساس لعرض متعدد محدد بشدة في مشروع حديث.

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