2011-11-01 14 views
5

बाध्यकारी नहीं है मुझे पता है कि एसओ पर काफी सवाल पूछा गया है।ListBox मेरे व्यूमोडल

here और here

लेकिन मैं अभी भी समस्या को समझ नहीं सकता।

मैं खुद को एमवीसी ढांचे को पढ़ाने के लिए एक ब्लॉग विकसित कर रहा हूं। अब जब मैं नीचे दिए गए दृश्य को पोस्ट करता हूं, तो ListBoxFor सहायक मेरे मॉडल पर किसी भी मूल्य को बाध्य नहीं करता है। सूची में सभी श्रेणियां सफलतापूर्वक शामिल हैं लेकिन जब पोस्ट नियंत्रक दृश्य मॉडल को वापस ले जाता है तो श्रेणियां ऑब्जेक्ट शून्य होती है।

यहां व्यू मॉडल है:

public class PostViewModel 
{ 
    public Post Posts { get; set; } 
    public IEnumerable<Category> Categories { get; set; } 
} 

नियंत्रक:

public ActionResult Create() 
    { 
     PostViewModel post = new PostViewModel(); 
     post.Categories = db.ListCategories(); 
     return View(post); 
    } 

दृश्य:

<p>@Html.ListBoxFor(model => model.Categories, new MultiSelectList(Model.Categories, "CategoryID", "CategoryName"))</p> 
+0

क्या आपको अपनी पोस्ट कार्रवाई में शून्य मूल्य मिल रहा है या जब आप पोस्ट कार्रवाई के बाद एक ही दृश्य प्रस्तुत करने का प्रयास करते हैं? – epzee

उत्तर

9

मेरा मानना ​​है कि आप अपना दृश्य मॉडल में एक सरणी संपत्ति होनी चाहिए जो चयनित आईडी बाध्य होंगे।

public class PostViewModel 
{ 
    public Post Posts { get; set; } 
    public int[] SelectedCategoryIds { get; set; } 
    public IEnumerable<Category> Categories { get; set; } 
} 

और अपने Html.ListBoxFor कॉल बदल SelectedCategoryIds संपत्ति के लिए किया जाना है।

<p>@Html.ListBoxFor(model => model.SelectedCategoryIds, new MultiSelectList(Model.Categories, "CategoryID", "CategoryName"))</p> 

के रूप में एक तरफ एक: अब जब कि तुम SelectedCategoryIds संपत्ति के लिए एक सूची बॉक्स का निर्माण कर रहे हैं, यदि आप सूची के लिए एक लेबल है तो आप इस SelectedCategoryIds संपत्ति के लिए भी होने के लिए बदलना चाहिए।

@Html.LabelFor(model => model.SelectedCategoryIds, "Categories") 

+0

+1 यह वास्तव में मुझे कुछ दृश्यमान अवधारणाओं को प्राप्त करने में मदद मिली – PhilPursglove

+0

@fsmmu आपका PostViewModel डोमेन श्रेणी वाले श्रेणी सूची को लपेटना नहीं चाहिए। – Elisabeth

2

नहीं 100% यकीन है कि अगर मैं अपने प्रश्न को समझने ("Categories" लेबल पाठ है); लेकिन क्या यह कोड मदद करता है? यह दिखाता है कि फ़ॉर्म को वापस सर्वर पर पोस्ट करते समय आप कौन सी श्रेणियां चुनी गई थीं।

[HttpPost] 
public ActionResult Create(Post post, FormCollection formCollection) 
{ 
    var listOfCategoryIDs = formCollection["categories"]; 
    var arrayOfCategoryIDs = listOfCategoryIDs.Split(','); 
} 
संबंधित मुद्दे