2010-03-04 7 views
8

से चेकबॉक्स सूची प्रस्तुत करें चेकबॉक्स की सूची के साथ आप मल्टीसेलेक्स्टलिस्ट को कैसे जोड़ते हैं?एएसपी.नेट एमवीसी: मल्टीसेलेक्स्ट

उदाहरण के लिए। मैं इस तरह के मॉडल

model.Groups = new MultiSelectList(k.Groups, "Id", "Name", selectedGroups) 

मुझे इसे कैसे प्रस्तुत करना चाहिए? यह

<% foreach (var item in Model.Groups.Items) { %> 
    <input type="checkbox" name="groups" value="<%=item.Value%>" id="group<%=item.Value%>" checked="<%=item.Selected?"yes":"no"%>" /> 
    <label for="group<%=item.Value%>"><%=item.Text%></label> 
<% } %> 

त्रुटि CS1061 काम नहीं करता है: 'वस्तु' 'मान' के लिए एक परिभाषा शामिल नहीं है ...

वहाँ एक एचटीएमएल हेल्पर विधि है कि मैं का उपयोग कर सकते है?

(फिर, जब तक कि यह स्पष्ट है, कैसे मैं तो नियंत्रक पर वापस चुने गए मानों मिलना चाहिए फ़ॉर्म सबमिट किया जाता है जब?)

+0

कैसे आप नियंत्रक में उन लोगों के समूह की आवश्यकता है? अगर आपको फॉर्म से समूह आईडी प्राप्त हुई तो क्या यह पर्याप्त होगा? –

+0

मुझे सिर्फ यह जानने की आवश्यकता होगी कि चयन बदल गए हैं (यानी फॉर्म सबमिट होने पर कौन से चेक किए जाते हैं)। लेकिन अधिक महत्वपूर्ण बात यह चेक बॉक्स – Aximili

उत्तर

18

मैं सिर्फ देखने के लिए अगर चयन बदल गया था कि हम कैसे देख सकते हैं परीक्षण किया गया।

public class Group { 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

//And some data to play with 
var allGroups = new List<Group>(); 
allGroups.Add(new Group { ID = 1, Name = "one" }); 
allGroups.Add(new Group { ID = 2, Name = "two" }); 
allGroups.Add(new Group { ID = 3, Name = "three" }); 

var selectedGroups = new List<Group>(); 
selectedGroups.Add(allGroups[0]); 
selectedGroups.Add(allGroups[2]); 

var m = new MultiSelectList(allGroups, "ID", "Name", 
    selectedGroups.Select(x => x.ID)); 

//passed that data to the view with ViewData 
ViewData["list"] = m; 

चेकबॉक्स तत्वों:

<% foreach (var item in (MultiSelectList)ViewData["list"]) { %> 
    <input type="checkbox" name="groups" value="<%=item.Value%>" 
     id="group<%=item.Value%>" 
     <%=item.Selected ? "checked=\"checked\"" : String.Empty%>/> 
    <label for="group<%=item.Value%>"><%=item.Text%></label> 
<% } %> 

कार्रवाई में एक पूर्णांक सरणी स्वीकृत:

[HttpPost] 
public ActionResult SomeAction(int[] groups) { 
    if (groups != null) { 
     var postedSelection = allGroups.Where(x => groups.Contains(x.ID)); 
     if (!selectedGroups.SequenceEqual(postedSelection)) { 
      //selection was changed 
     } 
     else { 
      //selection is the same 
     } 
    } 
    else { 
     //no group ID was posted 
    } 
} 

मुझे आशा है कि कुछ विचार देता है।

+0

मैं देख रहा हूँ रेंडर करने के लिए कैसे, तो यह foreach (Model.Groups में वर आइटम) बजाय foreach (Model.Groups.Items में वर आइटम) होना चाहिए आप Cagdas धन्यवाद ! – Aximili

2

मैं बस ऊपर से उदाहरण का उपयोग करके अपना कार्यान्वयन साझा करना चाहता था। मैं उन गुणों को पॉप्युलेट कर रहा हूं जो मेरे डेटाबेस में कुंजी/मूल्य जोड़े में व्यवस्थित हैं। मेरे उदाहरण में मैं प्रत्येक प्रॉपर्टी को एक शब्दकोश में एक प्रमुख मूल्य जोड़ी के रूप में संग्रहीत करता हूं। शब्दकोश में प्रत्येक आइटम जैसे कि "रंग" और DataValueField तरह = "1", DataTextField = "ब्लैक" आदि ...

VewModel कोड

public Dictionary<string, MultiSelectList> Properties { get; private set; } 

    private void SetProperties() 
    { 
     this.Properties = new Dictionary<string, MultiSelectList>(); 

     foreach(InventoryItemProperty property in new InventoryItemPropertyRepository().FindAllInventoryItemProperties()) 
     { 
      this.Properties.Add(property.Key.Name, new MultiSelectList(property.Values, "Id", "Value")); 
     } 
    } 

देखें मूल्यों के साथ एक MultiSelectList एक स्ट्रिंग कुंजी में शामिल होंगे मार्कअप

<div id="editor-inventory-item-properties"> 
     <% foreach(string key in Model.Properties.Keys){ %> 
      <div class="editor-label"> 
       <label for="<%= key.ToLower() %>"><%= key %></label><br /> 
       <% foreach(var item in Model.Properties[key]){ %> 
        <input type="checkbox" 
         id="<%= key.ToLower() + "-" + item.Text.ToLower() %>" 
         name="inventoryItemPropertyValues" 
         value="<%= item.Value %>" 
         <%= item.Selected ? "checked=\"checked\"" : string.Empty %> /> 
        <label for="<%= key.ToLower() + "-" + item.Text.ToLower() %>"> 
        <%= item.Text %></label><br /> 
       <% } %> 
      </div> 
     <% } %> 
    </div> 

नियंत्रक कार्रवाई कोड

// 
    // POST: /Admin/InventoryItems/Create 

    [HttpPost] 
    public ActionResult Create(InventoryItem inventoryItem, int[] inventoryItemPropertyValues) 
    { 
     try 
     { 
      inventoryItem.Created = DateTime.Now; 
      inventoryItem.LastUpdated = inventoryItem.Created; 
      this.inventoryItemRepository.Add(inventoryItem); 
      this.inventoryItemRepository.Save(); 

      if(inventoryItemPropertyValues != null) 
      { 
       SaveInventoryItemPropertyValues(inventoryItem.Id, inventoryItemPropertyValues); 
      } 

      return RedirectToAction("Details", new { id = inventoryItem.Id }); 
     } 
     catch 
     { 
      throw; 
      //return View(); 
     } 
    } 
private void SaveInventoryItemPropertyValues(int inventoryItemId, int[] inventoryItemPropertyValues) 
    { 
     for(int i = 0; i < inventoryItemPropertyValues.Length; i++) 
     { 
      this.inventory_Item_ProperytValueRepository.Add(new Inventory_Item_PropertyValue() { InventoryItemId = inventoryItemId, InventoryItemPropertyValueId = inventoryItemPropertyValues[i] }); 
     } 

     this.inventory_Item_ProperytValueRepository.Save(); 
    } 
संबंधित मुद्दे