2010-01-05 17 views
6

के साथ टाइप किया गया है, मैं जानना चाहता हूं कि मैं मल्टीसेलेक्ट बॉक्स से अपने दृढ़ टाइप किए गए दृश्य में अपने फॉर्म मानों को कैसे बांध सकता हूं।asp.net mvc दृढ़ता से टाइप मॉडल को मल्टीसेलेक्ट

जाहिर है जब फॉर्म बहु-चयन बॉक्स सबमिट करता है, तो मेरे मूल्यों का चयन एक विचलित स्ट्रिंग सबमिट करेगा ... मेरे मॉडल को संलग्न करने के लिए ऑब्जेक्ट्स की एक सूची में मूल्यों की इस स्ट्रिंग को वापस करने का सबसे अच्छा तरीका क्या है अद्यतन?

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

अपने मॉडल नियंत्रक के अंदर अपडेट करते समय मैं नीचे की तरह UpdateModel उपयोग कर रहा हूँ:

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

हालांकि मैं किसी भी तरह की वस्तुओं में वापस स्ट्रिंग से मूल्यों को प्राप्त करने के लिए की जरूरत है।

मुझे लगता है कि मॉडल-बाइंडर्स के साथ ऐसा कुछ हो सकता है लेकिन मुझे यह कैसे करना है इसके बारे में कोई स्पष्ट स्पष्ट उदाहरण नहीं मिल रहा है।

धन्यवाद !! पॉल

उत्तर

3

आप सही हैं कि मॉडल बाइंडर जाने का तरीका है। इसे आज़माएं ...

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); 
    } 
} 
0

इस विषय पर Phil Haacks blog post देखें। मैंने हाल ही में एक परियोजना में बहु चुनिंदा दृढ़ता से टाइप किए गए दृश्य के आधार के रूप में इसका इस्तेमाल किया।

+0

हैक का पोस्ट ऑब्जेक्ट्स की बाध्यकारी सूची के बारे में है, सूचीबॉक्स नहीं ... –

संबंधित मुद्दे