2009-01-21 13 views
6

मैं JQuery के साथ एक एएसपी.नेट एमवीसी फॉर्म में गतिशील रूप से फ़ील्ड जोड़ना चाहता हूं।एएसपी.नेट एमवीसी और JQuery गतिशील फॉर्म सामग्री

उदाहरण:

<script language="javascript" type="text/javascript"> 
    var widgets; 

    $(document).ready(function() { 
     widgets = 0; 
     AddWidget(); 
    }); 

    function AddWidget() { 
     $('#widgets').append("<li><input type='text' name='widget" + widgets + "'/></li>"); 
     widgets++; 
    } 
</script> 

<ul id="widgets"> 
</ul> 

यह काम करता है, लेकिन मैं मैन्युअल नियंत्रक में प्रपत्र मूल्यों पुनरावृत्ति करने के लिए जा रहा था:

[AcceptVerbs("Post")] 
public ActionResult AddWidget(FormCollection form) 
{ 
    foreach (string s in form) 
    { 
     string t = form[s]; 
    } 

    return RedirectToAction("ActionName"); 
} 

लेकिन यह मेरे लिए हुआ है जब मैं वापस करने के लिए भेज देते नियंत्रक में कार्रवाई प्राप्त करें मुझे फॉर्मडेटा को दर्ज मानों के साथ सेट करना होगा और फिर <% स्क्रिप्टिंग के साथ विजेट को सक्रिय रूप से जोड़ना होगा।

वर्तमान रिलीज में ऐसा करने का क्या तरीका है (5 मुझे विश्वास है)?

उत्तर

4

मेरे समाधान इस (छद्म कोड) की तरह कुछ हो सकता है:

<script language="javascript" type="text/javascript"> 
    var widgets; 

    $(document).ready(function() { 
     widgets = 0; 
     <% for each value in ViewData("WidgetValues") %> 
      AddWidget(<%= value %>); 
     <% next %> 
    }); 

    function AddWidget(value) { 
     $('#widgets').append("<li><input type='text' name='widget" + widgets + 
          "'>" + value + "</input></li>"); 
     widgets++; 
    } 
</script> 

<ul id="widgets"> 
</ul> 

और नियंत्रक में:

[AcceptVerbs("Post")] 
public ActionResult AddWidget(FormCollection form) 
{ 
    dim collValues as new Collection; 
    foreach (string s in form) 
    { 
     string t = form[s]; 
     collValues.add(t) 
    } 
    ViewData("WidgetValues") = collValues; 
    return RedirectToAction("ActionName"); 
} 

आप बाद में
(वीबी मिश्रण के लिए खेद विवरण काम कर सकते हैं सी # के साथ, मैं एक वीबी लड़का हूं)

0

मुझे यहां बिंदु याद आ रहा है, लेकिन, क्या आपको डेटा को वास्तव में एक फॉर्म एक्शन के माध्यम से नियंत्रक को पोस्ट करने की आवश्यकता है? नियंत्रक को डेटा पोस्ट करने के लिए jquery का उपयोग करके AJAX कॉल क्यों न करें ... या बेहतर अभी तक एक वेब सेवा? डेटा एसिंक भेजें और भेजे गए डेटा मानों के साथ दृश्य को पुनर्निर्माण करने की कोई आवश्यकता नहीं है।

यह ठीक काम करता है यदि मूल्यों का उपभोग किया जाता है और फिर कभी भी उपयोग नहीं किया जाता है, हालांकि, यदि आप डेटा को जारी रखने और इसे सतह पर रखने की योजना बनाते हैं, दृश्य, आपके मॉडल को वास्तव में डेटा संरचना का समर्थन करना चाहिए। मॉडल पर शायद Dictionary<string, string>

+0

स्क्रिप्टिंग फ़ॉर्म डेटा सबमिट करने के लिए वास्तव में स्वीकार्य नहीं है, एप्लिकेशन को स्क्रिप्टिंग सक्षम किए बिना गर्वपूर्वक अव्यवस्थित होना चाहिए। – blu

+4

@blu Ha? नियंत्रण बनाने के लिए आप पहली जगह जावास्क्रिप्ट का उपयोग कर रहे हैं; जेएस अक्षम के साथ यह कैसे गड़बड़ कर देगा? – Aleris

+0

हाँ, मेरी टिप्पणी इस जवाब के लिए समझ में नहीं आता है। – blu

0

मैं एक ASP.net डेवलपर नहीं कर रहा हूँ, लेकिन मैं पीएचपी कि आप इनपुट फ़ील्ड के लिए नाम के रूप में उपयोग कर सकते हैं सरणियों

पूर्व से जानते हैं:

<input type="text" name="widgets[]" /> 
<input type="text" name="widgets[]" /> 

फिर आप उस पोस्ट चर विजेट के माध्यम से पुनरावृति कर सकते हैं जैसे कि यह मूल्यों की एक सरणी थी।

नहीं dynamicaly नामित चर आदि

0

जहां तक ​​मैं समझता हूँ कि समस्या विजेट में तैनात मूल्यों की रक्षा करना है के साथ चारों ओर खिलवाड़। मुझे लगता है कि आप केवल उन विस्तृत लोगों को प्रस्तुत कर सकते हैं जिन्हें आप दृश्य प्रतिपादन के दौरान सर्वर पर पॉप्युलेट नहीं करना चाहते हैं।

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