2009-11-14 11 views
5

से एएसपी.नेट एमवीसी मॉडल डेटा तक पहुंचने के लिए मैं नियंत्रक से मॉडल डेटा तक पहुंचने के लिए JQuery के $ .getJSON का उपयोग करने की कोशिश कर रहा हूं, और जावास्क्रिप्ट में जेएसओएन ऑब्जेक्ट का उपयोग करने के लिए उपयोग करने के लिए उपयोगकर्ता उपयोगकर्ता को जोड़ता है और हटा देता है एक सूचि। सभी जेएस बाहरी फाइल में किया जाता है। मॉडल डेटा के लिए सर्वर पर हिट पृष्ठ लोड होने के बाद केवल एक बार किया जाता है ताकि उपयोगकर्ता को चुनने के लिए विकल्पों की पूरी सूची मिल सके। उसके बाद, उपयोगकर्ता जितनी चाहें उतनी सूची को संशोधित कर सकता है (और JSON ऑब्जेक्ट तदनुसार अपडेट किया गया है), और फिर इसे सेव करें (डीबी पर वापस लिखा जाता है)।बाह्य जावास्क्रिप्ट फ़ाइल

लेकिन यहां मेरी समस्या है: $ .getJSON का उपयोग करते समय, नियंत्रक में कॉल करने की विधि को एक आईडी की आवश्यकता होती है ताकि यह देख सके कि मैं किस विशेष संसाधन के बारे में बात कर रहा हूं और विकल्पों की सूची वापस प्राप्त करता हूं उस विशेष संसाधन के लिए। लेकिन बाहरी जेएस फ़ाइल से, मुझे नहीं पता कि नियंत्रक को पास करने के लिए उस आईडी को कैसे प्राप्त किया जाए। यह उस लिंक में बनाया गया है जो पृष्ठ को पहली जगह खोलता है, और यूआरएल में बैठा है, लेकिन पेज लोड होने के बाद मुझे नहीं पता कि यह आईडी को नियंत्रक को पास करने के लिए कैसे प्राप्त किया जाए। मैं नीचे मेरी कोड के कुछ चिपकाया है, क्योंकि मैं जानता हूँ कि यह भ्रामक है:

नियंत्रक में

विवरण विधि है कि शुरू में कोई पृष्ठ लोड (एक RESOURCEID क्या लोड करने के लिए पता करने के लिए ले जाता है):

public ActionResult Details(string resId) 
{ 
    //call base method 
    base.Details(resId, resourceType); 
    Evaluation eval = (Evaluation)this.Model; 
    ViewData.Model = eval; 
    return View("Index"); 
} 

में मेरी बाहरी जे एस फ़ाइल, मैं यह कर रहा हूँ:

:

$.getJSON("/Evaluation/PopulateJournalOptions/" + id, populateJSON); 

और नियंत्रक में, मैं एक और तरीका कहा जाता PopulateJournalOptions कि JSON ऑब्जेक्ट निर्माण करने के लिए कहा जाता हो जाता है लिखा था

फिर, मेरी समस्या यह है कि, पृष्ठ लोड होने के बाद, मुझे उस आईडी तक पहुंच नहीं है जिसे मुझे PopulateJournalOptions में पास करने की आवश्यकता है। मैंने पॉप्युलेट जर्नलऑप्शन के लिए कुछ भी नहीं पारित करने की कोशिश की है, और वहां एक नई वस्तु बना रही है और इसे (Evaluation)this.Model के बराबर सेट कर रही है, लेकिन यह। मॉडल दिखाई देने वाला प्रतीत होता है, संभवतः क्योंकि यह जेएस से कॉल होने के बाद नियंत्रक का एक नया उदाहरण है। तो मैं यहाँ फंस गया हूँ। कोई विचार?

+0

मैं आपके सवाल का जवाब नीचे है और मैं सुझाव है कि आप एक अच्छा MVC पुस्तक (Apress से) और अनुरोध जीवन चक्र के बारे में पढ़ें। –

उत्तर

5

आप पृष्ठ पर एक छिपी हुई फ़ील्ड में आईडी डालने और उसके बाद होने के बारे में सोचा है:

ViewData["resouceID"] = resouceID; 

देखें कि शुरू में भार में इस रखो आपकी जावास्क्रिप्ट फ़ील्ड से आईडी पढ़ती है?

$.getJSON("/Evaluation/PopulateJournalOptions/" + $('#Id').attr('value'), populateJSON); 

फिर, अपने विचार में,

<%= Html.Hidden("Id") %> 

अपने मॉडल एक संपत्ति के रूप में आवश्यक Id होने के साथ

+0

मैंने इसके बारे में सोचा नहीं था, और यह निश्चित रूप से एक दिलचस्प दृष्टिकोण है। जितना आसान है, मुझे लगता है कि यह धोखाधड़ी की तरह है। क्या यह किसी और के लिए ऐसा लगता है? –

+0

जितना मैंने इस विधि के बारे में सोचा, उतना ही साफ यह शुरू हो गया, इसलिए मैंने आगे बढ़कर इसे लागू किया। लेकिन .attr ('value') के बजाय, मुझे .html() का उपयोग करने की आवश्यकता है। अन्यथा, महान काम करता है। जवाब के लिए धन्यवाद! एक साइड नोट के रूप में, मैं वास्तव में नापसंद करता हूं कि मैं इस JSON ऑब्जेक्ट को बनाने के लिए सर्वर को दो बार मार रहा हूं (एक बार पेज लोड करने के लिए और दूसरा JSON के लिए डेटा वापस करने के लिए नियंत्रक कार्रवाई को कॉल करने के लिए)। यह शानदार होगा अगर मैं उस JSON को सर्वर लोड पर वापस जाने के बजाय पृष्ठ लोड पर बाहरी जावास्क्रिप्ट चर में प्राप्त कर सकता हूं। –

+0

कोई कारण नहीं है कि आप अपने मॉडल में मूल्य नहीं लगा सकते हैं और फिर इसे दृश्य में जावास्क्रिप्ट चर में लिख सकते हैं। एक एजेक्स कॉलबैक का उपयोग करने से आपका प्रारंभिक पृष्ठ लोड तेज हो जाएगा, लेकिन यदि आप समय बर्दाश्त कर सकते हैं तो आप इसे सीधे दृश्य में डाल सकते हैं। – tvanfosson

0

नियंत्रक में इस रखो:

<script> 
$(document).ready(function() { 
    $.getJSON("<%=Url.Action("YourActionName", "YourControllerName", new {id = ViewData["resouceID"]}) %>", populateJSON); 
}); 
</script> 
+0

हाय जोश, त्वरित उत्तर के लिए धन्यवाद। क्या आप संक्षेप में समझा सकते हैं कि यह क्या कर रहा है? ऐसा लगता है कि मुझे अभी भी आईडी को "yourID" के रूप में आपूर्ति करना पड़ सकता है। मैंने $ .getJSON को प्रदान की गई हार्डकोडेड आईडी के साथ अपना कोड परीक्षण किया है और सबकुछ काम करता है, इसलिए मेरा कंट्रोलर कॉल, कॉलबैक, रूटिंग इत्यादि ठीक काम करता है, लेकिन मुझे नहीं पता कि आईडी को पास करने के लिए कैसे प्राप्त किया जाए। मैं आपके उत्तर का गलत व्याख्या कर सकता हूं, लेकिन ऐसा लगता है कि मुझे अभी भी आईडी की आपूर्ति करने की आवश्यकता है। साथ ही, यह बाहरी जेएस फ़ाइल से काम करेगा? एक बार फिर धन्यवाद। –

+0

मैंने आगे जवाब देने के लिए अपना जवाब संपादित किया है। –

+0

यदि आप क्लाइंट पर पृष्ठ पते से आईडी प्राप्त करने की आवश्यकता समाप्त करते हैं, तो क्वेरी प्लगइन देखें: http://plugins.jquery.com/project/query-object –

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