2011-04-11 21 views
11

एमवीसी नौसिखिया प्रश्न; मैं चारों ओर खेलने के बजाय मैनुअल पढ़ना द्वारा सीख रहा हूँ ... :)एमवीसी: जब आप "सबमिट" बटन पर क्लिक करते हैं तो कौन सा कोड बुलाया जाता है?

मैं देख रहा हूँ जब मैं एक "संपादित करें" बनाने कि स्वत: जनरेट दृश्य एक "सबमिट करें" बटन शामिल देखने:

<input type="submit" value="Save" /> 

लेकिन यह सहेजने के लिए दृश्यों के पीछे कौन सा कोड बुलाया जाता है? विशेष रूप से, इस दृश्य के अंतर्निहित मॉडल में कोड में अपना स्वयं का फैंसी सेव लॉजिक है जिसे मैं कॉल करना चाहता हूं। दृश्यों के पीछे अदृश्य रूप से जो भी मानक कोड कहा जा रहा है, उसके बजाय मैं अपने कोड को आमंत्रित करने के लिए दृश्य कैसे प्राप्त करूं?

+2

मैनुअल पढ़ना जल्द से जल्द होगा :) nerddinner ट्यूटोरियल एमवीसी के साथ जाने के लिए बहुत अच्छा है। – raklos

उत्तर

5

यह आपके कंट्रोलर पर फ़ॉर्म एक्शन इंगित करने वाली सार्वजनिक कार्रवाई विधि को कॉल करेगा। फिर आप दृश्य मॉडल पर सहेज सकते हैं।

public virtual ActionResult Save(MyViewModel model) { 
     model.Save();    

     --- more code to do stuff here 
    } 

MyController/Save

अपने फ़ॉर्म सेट कार्रवाई तुम भी एक विशिष्ट नियंत्रक पर कोई खास कार्य पद्धति के रूप इंगित करने के लिए अपने कोड में using (Html.BeginForm... उपयोग कर सकते हैं।

<form action="/Account/LogOn" id="loginForm" method="post"> 

खाता नियंत्रक में लॉगऑन क्रिया इस रूप में सक्रिय किया जाएगा

3

यह कार्रवाई विधि प्रपत्र तत्व की कार्रवाई भाग में परिभाषित जैसे कॉल शीर्ष पर विधि using (Html.BeginForm() जो फॉर्मटाग प्रस्तुत करेगा। इस विधि में एक अधिभार है जो एक्शननाम और नियंत्रक नाम लेता है। तो आप अपने नियंत्रक में कार्रवाई निर्दिष्ट कर सकते हैं जिसे कॉल करना है।

0

ViewPage एक BeginForm है:

+1

सत्य नहीं है, यह उस विधि की पोस्ट कार्रवाई को कॉल करता है जिसे आप वर्तमान में देख रहे हैं। – Jimmy

+0

@ जिमी: सुधारने के लिए धन्यवाद। उस विधि के लिए निर्दिष्ट कोई पोस्ट एक्शन नहीं है जिसने दृश्य को बुलाया, किस क्रिया को बुलाया जाएगा? – Novice

+0

यदि आप डिफ़ॉल्ट रूप से कार्रवाई 'लॉगिन' के रूप में हैं, तो यह उसी क्रिया पर पोस्ट करेगा, इसलिए यह कार्रवाई 'लॉगिन' पर पोस्ट करेगा, मुझे विश्वास है कि यह – Jimmy

5

जब आप सबमिट बटन पर क्लिक करते हैं, तो अनुरोध HTTP मॉड्यूल पर जाता है जो इसे संबंधित नियंत्रक कार्रवाई के लिए निर्देशित करता है। जब संपादन दृश्य टेम्पलेट से बनाए गए है प्रपत्र के पद पता संपादित करें प्रपत्र यानी की रूप में ही है आप देख रहे हैं, तो/घर/संपादन आप फार्म के उद्घाटन टैग

<form method="post" action="/home/edit"> 

यदि आप किसी अन्य कार्रवाई हो सकती है में निम्नलिखित एचटीएमएल देख सकते हैं विधि यह है कि केवल

[HttpPost] 
public ActionResult Edit(int id, ViewModel model) 
{ 
     //put your logic here handling submitted values 
} 

की तरह पोस्ट अनुरोध स्वीकार करता HttpPost विशेषता बताता है कि यह केवल पोस्ट अनुरोध को पूरा करने के रूप में रूप

11

यह है बटन नहीं रेंडर करने के लिए प्रयोग किया जाता का अनुरोध करने के लिए विरोध किया है कि डी जुर्माना क्या होता है, लेकिन फार्म स्वयं ही होता है। सबमिट प्रकार का बटन (प्रति फॉर्म एक) केवल फ़ॉर्म सबमिशन को ट्रिगर करता है, जिसे फॉर्म द्वारा ही नियंत्रित किया जाता है।

<form name="input" action="users/save" method="post"> 
    <!-- Form content goes here --> 
    <input type="submit" value="Submit" /> 
</form> 

कार्रवाई एक यूआरएल है और क्या होता है कि ब्राउज़र प्रपत्र (<input...>) में सभी क्षेत्रों के मूल्यों एकत्र करता है और निर्दिष्ट करने के लिए उन्हें पोस्ट: जैसे -

एक रूप एक क्रिया होती है यूआरएल।

एएसपी.नेट एमवीसी रूपों में आमतौर पर एचटीएमएल हेल्पर्स का उपयोग करके परिभाषित किया जाता है, ताकि फॉर्म एक्शन के लिए यूआरएल का निर्माण एएसपी.नेट एमवीसी को दिया जा सके।उदाहरण के लिए ऊपर के लिए:

<% using(Html.BeginForm("Save", "Users")) %> 
<% { %> 
    <!-- Form content goes here --> 
    <input type="submit" value="Save" /> 
<% } %> 

जो इस मामले में एक यूआरएल /users/save और फार्म का निर्माण करेगा कि यूआरएल को पोस्ट करेंगे। यह शर्तों में एएसपी.NET रूटिंग को ट्रिगर करेगा जो /users/save यूआरएल को संभालेगा और इसे टुकड़ों में तोड़ देगा ताकि यह जान सके कि इसे "उपयोगकर्ता" नियंत्रक वर्ग पर "सहेजें" एक्शन विधि का आह्वान करना है। फिर यह सभी आने वाले फ़ील्ड नाम-मूल्य जोड़ों को पढ़ेगा और यदि कोई हो तो उन्हें विधि पैरामीटर नामों पर मैप करने का प्रयास करें।

+0

क्या होगा यदि Html.BeginForm() में कोई पैरामीटर नहीं है? डिफ़ॉल्ट व्यवहार क्या है? वर्तमान नियंत्रक और सूचकांक ?? – KirstieBallance

+0

हां। कोई पैरामीटर के साथ BeginForm वर्तमान यूआरएल में एक HTTP पोस्ट भेजता है। देखें: http://stackoverflow.com/a/16744311/381082 – DeveloperDan

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

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