2010-03-04 9 views
12

मेरा परिदृश्य यह है: मेरे पास दो सूची बॉक्स हैं, जिनमें से मेरे सभी डेटाबेस आइटम और एक खाली है। उपयोगकर्ता पूर्ण सूची बॉक्स से रिक्त सूची बॉक्स में आवश्यक वस्तुओं को जोड़ता है।formcollection केवल चयनित HTML.listbox आइटम मान रखता है? एमवीसी

मैं उपयोगकर्ता द्वारा जोड़े गए सभी आइटम सबमिट करने के लिए एक फॉर्म का उपयोग कर रहा हूं।

समस्या यह है कि केवल सूची बॉक्स से चयनित आइटम सबमिट किए गए हैं। इसलिए यदि उपयोगकर्ता कुछ वस्तुओं को अचयनित करता है, तो वे फ़ॉर्म में सबमिट नहीं होंगे। मेरा विचार तो दिखाई देता है:

public ActionResult MyAction(FormCollection formCollection) 
{ 
    var addedItems = formCollection["AddedItems"].Split(','); 

    //....more code that does stuff with the items 
} 

मैं सब कुछ के बारे में गलत रास्ते पर जा रहा हूँ:

<% using (Html.BeginForm("MyAction", "MyController")) 
    { %> 

    <%= Html.ListBox("AddedItems", Model.Items)%> 

    <input type="submit" value="Submit" name="SubmitButton"/> 
<% } %> 

मेरे नियंत्रक इसलिए की तरह दिखता है? क्या सामान जमा करने का कोई बेहतर तरीका है? तुम क्या करोगे?

उत्तर

22

मैं यह भी कर रहा हूं, मुझे लगता है कि जिस तरह से मैंने इसे हल किया है वह थोड़ा और सुरुचिपूर्ण है। अनिवार्य रूप से मेरे पास सिर्फ एक jquery फ़ंक्शन है जो फ़ॉर्म पोस्ट से पहले चलता है जो सभी विकल्पों का चयन करता है।

$(function() { 
     $("form").submit(function (e) { 
      $("#box2View option").attr("selected", "selected"); 
     }); 
    }); 
+0

या वास्तव में मैं क्या कर रहा था। – Darcy

+0

महान विचार आदमी! धन्यवाद =) –

1

चेकबॉक्स में आइटमों की सूची क्यों नहीं है। फिर आप अपनी कार्रवाई में चेकबॉक्स के माध्यम से फिर से शुरू कर सकते हैं और सभी चयनित चेकबॉक्स ले जा सकते हैं।

<% foreach(var item in Model.Items) { %> 

    <%= Html.CheckBox(String.Format("ItemID.{0}", item.ID)) %> // each item tagged by the items id 

<% } %> 

public ActionResult MyAction(FormCollection formCollection) 
{ 

      foreach (var key in collection.AllKeys.Where(k => !k.Contains("SubmitButton")).ToArray<string>()) 
      { 
       // iterates thru check boxes we got rid of the button 

      } 
} 
+0

डेटाबेस आइटम सचमुच हजारों में हो सकते हैं। जिन मामलों को उपयोगकर्ता की आवश्यकता होगी, वे ज्यादातर मामलों में 1 - 10 से होंगे। मैं उपयोगकर्ता के लिए चुने गए सभी आइटम देखने का एक आसान तरीका चाहता था। मैं उम्मीद कर रहा था कि मैं html.listbox या कुछ को बांध सकता हूं और सभी वस्तुओं को इस तरह से प्राप्त कर सकता हूं ... वास्तव में यह नहीं पता कि यह संभव है/सही दृष्टिकोण – Darcy

2

क्योंकि यह सिर्फ चयन बॉक्स है। आप चयन बॉक्स में सभी मान पोस्ट नहीं कर सकते हैं। आपको अतिरिक्त आइटम पकड़ने और छिपे हुए इनपुट में स्टोर करने के लिए जावास्क्रिप्ट का उपयोग करना होगा।

अन-परीक्षण कोड, लेकिन मुझे लगता है कि यह आपकी मदद करता है।

<script type="text/javascript"> 
    function addItem() { 
     var allItems = document.getElementById("AllItems"); 
     var op = allItems.options[allItems.selectedIndex]; 
     var hdSelectedItems = document.getElementById("hdSelectedItems"); 
     var lbSelectedItems = document.getElementById("lbSelectedItems"); 

     lbSelectedItems.options[lbSelectedItems.options.length] = op; 

     if (hdSelectedItems.value != '') { 
      hdSelectedItems.value += "," 
     } 
     hdSelectedItems.value += op.value; 
    } 
</script> 
<%= Html.Hidden("hdSelectedItems") %> 
<%= Html.ListBox("AllItems", Model.Items)%> 
<%= Html.ListBox("lbSelectedItems") %> 
<a href="#" onclick="addItem(); return false;">Add</a> 
+0

धन्यवाद, मैं इस तरह के समाधान के साथ गया। मैंने अभी आइटम को एक छिपे हुए में जोड़ा है और इसे नियंत्रक – Darcy

+1

में मेरे फॉर्मकॉलेक्शन से प्राप्त किया है, बिलकुल भी यह विकल्प आसान नहीं है, आप इसे सबमिट करते समय सभी आइटमों को चुनने के साथ कर सकते हैं लेकिन मुझे लगता है कि यह अच्छा समाधान नहीं है। – cem

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