2012-07-25 18 views
19

में Html.BeginForm का उपयोग क्या है MVC3 में Html.BeginForm का उपयोग क्या है। हम इसका उपयोग क्यों करते हैं, जब हम सीधे एक फॉर्म टैग जोड़ सकते हैं, क्या यह HTML सहायक कुछ क्षमता जोड़ता है या ऐसा कुछ करता है जो एक साधारण फ़ॉर्म टैग के साथ नहीं किया जा सकता है।एमवीसी 3

उत्तर

29

Html.BeginForm सहायक विधि में couple overloads है जिसका उद्देश्य उद्देश्य रूखित रूपों को आसान बनाना है। यह एमवीसी स्टैक्चर के बारे में पता है और यह सुनिश्चित करता है कि यह एक नियंत्रक और कार्रवाई को लक्षित करता है।

<form method="post" action="@Url.Action(...)"> 

माइक्रोसॉफ्ट के शब्दों में::

ASP.NET MVC ढांचे सहायक तरीकों कि एक दृश्य में HTML रेंडर करने के लिए एक आसान तरीका प्रदान भी शामिल है इस पर वाक्यात्मक चीनी का सिर्फ एक सा है।

बेशक, कोई भी आपको उनका उपयोग नहीं कर रहा है। यह सिर्फ वरीयता का मामला है। असल में, एमवीसी के शुरुआती दिनों में, कई वेबफॉर्म डेवलपर्स ने सर्वर नियंत्रण से अपनी नई आजादी मनाई, ए-ला <asp:TextBox> एट अल।, और हाथ से सबकुछ लिखने पर जोर दिया।

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

@using(Html.BeginForm()) 
{ 
    @Html.LabelFor(...) 
    @Html.EditorFor(...) 
} 

Html.BeginForm रिटर्न एक IDisposable वस्तु, आप सी # using बयान में लपेट के लिए अनुमति: Html.BeginForm केवल आपके शुरू करने और अपनी फार्म खत्म करने के लिए एक सुसंगत रास्ता देती है। जब using निकलता है, तो निपटान आपके लिए स्वचालित रूप से Html.EndForm() पर कॉल करेगा। Html.EndForm रिटर्न void चूंकि यह उस्तरा से कॉल करने के लिए थोड़ा असुविधाजनक है:

@Html.BeginForm() 
<formStuff> 
@{Html.EndForm();} 

एक साधारण @Html.EndForm(), यानी Write(Html.EndForm()) -> Write(void) करने के लिए बारी टाइम त्रुटि संकलित कर देगा।

+0

इस यहाँ क्या मतलब का उपयोग करता है, यह asp.net कि आप IDisposable वस्तुओं रैप करने के लिए उपयोग करने में निर्माण का उपयोग कर से संबंधित है? – Charu

+0

मैंने उत्तर में एक पैराग्राफ जोड़ा। – Kivin

4
बेशक

आप हाथ से कोड कर सकते हैं, लेकिन यह इस तरह के रूप कई फायदे है:

  • यह एक वस्तु है कि डिस्पोजेबल है देता है, ताकि आप इसे एक using खंड में डाल सकते हैं और कहीं भी होगी के लिए प्रपत्र टैग बंद आप
  • यह प्रपत्र कार्रवाई के लिए यूआरएल की गणना करता है
4

कुछ जो एक सरल फार्म के साथ नहीं किया जा सकता करता

अंत में प्रत्येक सहायक विधि कॉल को शुद्ध HTML में परिवर्तित कर दिया जाता है, इसलिए ऐसा कुछ भी नहीं है जो Html.BeginForm ऐसा कर सकता है जो <form> टैग का उपयोग करके सीधे नहीं किया जा सकता है।

Html.BeginForm पूरी तरह से एक सहायक विधि है।

2

सहायक मदद करने का क्या उद्देश्य है? (उदारवादी प्रश्न) आप मैन्युअल रूप से सभी इनपुट टाइप कर सकते हैं, लेकिन सहायक ... अच्छी तरह से, कभी-कभी आपकी सहायता करते हैं।

यह सब टैग करता है।हाँ, आप इसे मैन्युअल रूप से कर सकते हैं, या आप थोड़ा और कल्पना हो सकता है और ऐसा करते हैं:

@using(Html.BeginForm()) 
{ 
} 

यह रूप में अच्छी तरह से आप के लिए प्रपत्र टैग बंद हो जाएगा। तो अगर आप सुडौल कोष्ठक के अंदर अपने सभी आदानों रखने के लिए, आप प्रपत्र टैग को बंद करने को याद बारे में चिंता करने की जरूरत नहीं है।

+1

सवाल यह है कि * कब * इससे मदद मिलेगी। टैग को बंद करने के लिए भूलना घुंघराले ब्रैकेट को बंद करना भूल जाता है - तो बिंदु क्या है? – John

0

बहुत बढ़िया सवाल है, मुझे लगता है कि अपने आप को काफ़ी के बारे में सोचा।

मैं गलत हो सकता है, लेकिन यहाँ मेरा अनुमान है (एक बेहतर आदमी मुझे सही कर सकते हैं):

MVC के प्रारंभिक दिनों में, वहाँ कोई उस्तरा था।

के बीच स्विच सी #/वीबी और html कठिन वाक्य रचना के लिहाज से था, इसलिए उन सीमाओं को कम करने की दिशा में एक धक्का था।

फॉर्म बनाते समय, यह पूरी तरह से सी #/वीबी पक्ष पर पूरी तरह से फॉर्म बनाने के लिए फायदेमंद दिखाई देता था, बिना किसी इंटरमलिंग मैनुअल एचटीएमएल के, एचटीएमएल की आसपास की दुनिया में केवल एक सीमा है।

और चूंकि प्रोग्रामर अक्सर कहीं और से काम करने की शैली की नकल, उन सहायकों का प्रचलन भले ही अपने लाभ के रेजर के आगमन के साथ गायब हो गया है कायम किया है।