2009-09-18 12 views
6

मेरे पास आंशिक दृश्य है जो कई विचारों द्वारा प्रस्तुत किया जाता है जो कई क्रिया विधियों द्वारा लौटाए जाते हैं।एएसपी.नेट एमवीसी - आंशिक दृश्य के भीतर से वर्तमान कार्रवाई कैसे प्राप्त करें?

आंशिक दृश्य में एक ऐसा फॉर्म है जिसे कॉल किए गए एक्शन विधि पर पोस्ट करना चाहिए।

यह मेरी समझ यह है कि अगर मैं सिर्फ एक दृश्य के भीतर से

<% Html.BeginForm(); %> 

फोन, फ़ॉर्म की ऐसी गतिविधि विशेषता बुलाया कार्रवाई विधि को इंगित करेंगे। मैं ऐसा नहीं कर सकता, क्योंकि मुझे जावास्क्रिप्ट उद्देश्यों के लिए फ़ॉर्म की आईडी विशेषता सेट करने की आवश्यकता है। HTML.BeginForm का अधिभार जो मुझे HTML विशेषताओं को सेट करने देगा, उसे एक स्पष्ट नियंत्रक और क्रिया की भी आवश्यकता होती है। तो, बजाय एचटीएमएल सहायक का उपयोग कर के, मैं सिर्फ फ़ॉर्म तत्व बाहर लिख सकते हैं:

<form action="<%=(NEED TO SOMEHOW GET THE URL TO THE CURRENT ACTION) %>" method="post" id="myForm"> 

मैं सिर्फ यकीन है कि कैसे URL प्राप्त करने नहीं हूँ।

उत्तर

14

बस नियंत्रक और कार्रवाई के लिए शून्य पास करें। सही मूल्य प्रतिस्थापित किया जाएगा। उदाहरण के लिए:

<% using (Html.BeginForm(null, null, FormMethod.Post, new { id = "employeeGroupForm" })) 
+1

+1 - निश्चित रूप से, मेरा रास्ता है, और फिर आसान तरीका है :) –

+0

मुझे हंसी बना दिया! :) –

0

उस स्थिति में, शायद मेरे पास नियंत्रक (या मूल दृश्य) आपके मॉडल/व्यूडेटा में उपयुक्त गंतव्य यूआरएल रखेगा।

का सवाल है कैसे, अपने नियंत्रक के अंदर:

public ActionResult MyAction() { 
    MyModel m = new MyModel(); 

    ... 

    m.MyControlAction = "MyAction"; 
    m.MyControlController = "MyController"; 

    return View("MyView", m); 
} 
फिर अपने ध्यान में रखते हुए

:

Html.RenderPartial("MyControl", ViewData.Model); 

और अपने आंशिक दृश्य में:

Html.BeginForm(ViewData.Model.MyControlController, ViewData.Model.MyControlAction, ...) 

एक क्लीनर डिजाइन के लिए, आप शायद MyControlController और MyControlAction सदस्य एक इंटरफ़ेस फेंकना चाहते हैं कि प्रत्येक मॉडल उस नियंत्रण का उपयोग लागू करना चाहिए। फिर आंशिक दृश्य उस इंटरफ़ेस प्रकार के साथ दृढ़ता से टाइप किए गए मॉडल को लें।

+0

सहमत हुए, ऐसा लगता है कि ViewData को यह जोड़ने सबसे सीधे आगे बात होगी हो जाता है करने के लिए। – Amir

+0

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

+0

@ रोनी - आपको वर्तमान यूआरएल प्रति-सी की आवश्यकता नहीं है, आपको केवल मौजूदा नियंत्रक और क्रिया की आवश्यकता है - निश्चित रूप से आप जानते होंगे कि जब आप नियंत्रक की क्रिया विधि के अंदर होते हैं :) –

2

ViewContext.RouteData.Values ​​[ "कार्रवाई"]

या कुछ इसी तरह काम किया

+0

मुझे डिजाइन समय पर कार्रवाई नहीं पता है। –

+0

क्षमा करें कॉल को सही किया गया है, जो कि सही कार्रवाई खोजने के लिए रूटडाटा से कार्य मूल्य प्राप्त करता है। – AndreasN

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