2008-11-12 11 views
9

मैं निम्नलिखित कैसे करते हो, एक ASP.NET MVC UpdateModel साथ साथ ASP.NET MVC UpdateModel? मैं मॉडल में एक स्पेस डिलीमिट किए गए टेक्स्टबॉक्स डेटा (बिल्कुल नए स्टैक ओवरफ्लो प्रश्न में टैग्स टेक्स्टबॉक्स की तरह) में पढ़ने की कोशिश कर रहा हूं।एक sorta जटिल डेटा प्रविष्टि क्षेत्र

उदाहरण के लिए।

<input type="Tags" type="text" id="Tags" name="Tags"/> 

... 

public class Question 
{ 
    public string Title { get; set; } 
    public string Body { get; set; } 
    public LazyList<string> Tags { get; set; } 
} 

.... 

var question = new Question(); 
this.UpdateModel(question, new [] { "Title", "Body", "Tags" }); 

टैग संपत्ति instantiated हो जाता है, लेकिन यह केवल एक आइटम है, जो पूरे डेटा है कि टैग इनपुट क्षेत्र में प्रवेश किया था होता है। अगर मैं सूची में एक आइटम रखना चाहता हूं (अंतरिक्ष के माध्यम से स्ट्रिंग को विभाजित करने के आधार पर) .. कृपया सबसे अच्छा अभ्यास क्या है, कृपया इसे संभालें?

चीयर्स!

उत्तर

8

आप क्या करने की जरूरत अपने स्वयं में DefaultValueProvider का विस्तार है। अपने मूल्य प्रदाता में टैग को विभाजित करने और अपनी LazyList में लोड करने के लिए GetValue (नाम) का विस्तार करें। तुम भी UpdateModel करने के लिए अपने कॉल को बदलने के लिए की आवश्यकता होगी:

UpdateModel(q, new[] { "Title", "Body", "Tags" }, 
    new QuestionValueProvider(this.ControllerContext)); 

QuestionValueProvider मैंने लिखा है:

public class QuestionValueProvider : DefaultValueProvider 
    { 
     public QuestionValueProvider(ControllerContext controllerContext) 
      : base(controllerContext) 
     { 
     } 
     public override ValueProviderResult GetValue(string name) 
     { 
      ValueProviderResult value = base.GetValue(name); 
      if (name == "Tags") 
      { 
       List<string> tags = new List<string>(); 
       string[] splits = value.AttemptedValue.Split(' '); 
       foreach (string t in splits) 
        tags.Add(t); 

       value = new ValueProviderResult(tags, null, value.Culture); 
      } 
      return value; 
     } 
    } 

आशा इस मदद करता है

+0

हां! सुनिश्चित करते हैं! अब मैं सोच रहा हूं कि क्या यह सब कुछ करने के लायक है, केवल "शीर्षक" और "बॉडी" के साथ एक अपडेटमोडेल करने के बजाय, फिर मैं टैग प्रॉपर्टी को मैन्युअल रूप से सेट करता हूं, जब मैं कॉल अनुरोध करता हूं ["टैग्स]] और उसे विभाजित करता हूं? –

+0

@ जॉन - बस इस सूत्र जारी रखने के लिए, जब मैं जोड़ा <% = Html.ValidationMessage ("टैग")%> एचटीएमएल करने के लिए, यह अब System.Collections.Generic.List'1 साथ पाठ बॉक्स पूर्ण हो जाता है [Foo.Models .Tag]। सबसे पहले, यह एक स्ट्रिंग आलसी सूची है और मेरी अन्य कस्टम टैग कक्षाओं में से एक नहीं है। मैं इसे कैसे ठीक करूं? –

+0

क्या यह समाधान अब मौजूदा एमवीसी आरसी 2 के साथ पुराना है? – a7drew

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