Html.HiddenFor क्या करता है?


105

हालांकि मैंने Html.HiddenFor पर प्रलेखन पढ़ा है, मैंने इसे समझा नहीं है कि इसका उपयोग किस लिए किया जाता है ...

क्या कोई इसके उपयोग की व्याख्या कर सकता है और एक छोटा उदाहरण दे सकता है?

उन सहायकों को कोड में कहां जाना चाहिए?

जवाबों:


112

यह फ़ील्ड (आपके मॉडल से) के लिए फॉर्म पर एक छिपा हुआ इनपुट बनाता है जिसे आप इसे पास करते हैं।

यह आपके मॉडल / ViewModel में उन क्षेत्रों के लिए उपयोगी है, जिन्हें आपको पृष्ठ पर बनाए रखने की आवश्यकता होती है और जब कोई अन्य कॉल किया जाता है, तो वापस आ जाता है, लेकिन उपयोगकर्ता द्वारा नहीं देखा जाना चाहिए।

निम्नलिखित ViewModel वर्ग पर विचार करें:

public class ViewModel
{
    public string Value { get; set; }
    public int Id { get; set; }
}

अब आप चाहते हैं कि एडिट पेज आईडी को स्टोर करे लेकिन क्या यह देखा नहीं गया है:

<% using(Html.BeginForm() { %>
    <%= Html.HiddenFor(model.Id) %><br />
    <%= Html.TextBoxFor(model.Value) %>
<% } %>

यह निम्न HTML के बराबर परिणाम देता है:

<form name="form1">
    <input type="hidden" name="Id">2</input>
    <input type="text" name="Value" value="Some Text" />
</form>

<% = Html.HiddenFor (model.Id)%> <br /> ऊपर उनके उदाहरण में
ब्रायस फिशर

11
मैं उपयोगकर्ता द्वारा "देखा" कहूंगा। उपयोगकर्ता कुछ भी "संशोधित" कर सकते हैं, जिसे वे छिपाना या नहीं करना चाहते हैं।
क्रेग स्टंटज़

@ क्रेग - आप सही कह रहे हैं। मैं वास्तव में हालांकि मैंने उस शब्दांकन को बदल दिया है लेकिन स्पष्ट रूप से नहीं।
जस्टिन निस्नेर

और यह आम तौर पर आईडी के लिए उपयोग किया जाता है (जैसा कि ऊपर दिए गए उदाहरण में है), जिसे आप आम तौर पर प्रदर्शित नहीं करना चाहते हैं।
रिकएंडएमएसएफटी

मैं थोड़ा उलझन में हूं क्योंकि व्यू मॉडल कंट्रोलर के पैरामीटर नहीं है। तो दृश्य मॉडल के क्षेत्रों पर इनपुट का नाम क्यों उत्पन्न होगा?
जॉन

8

और अपने संपादित कार्य पद्धति पर छिपे हुए आईडी इनपुट का उपभोग करने के लिए:

[HttpPost]
public ActionResult Edit(FormCollection collection)
{
    ViewModel.ID = Convert.ToInt32(collection["ID"]);
}

8
यद्यपि यह तकनीकी रूप से सत्य है, लेकिन यदि आपको फ़ॉर्म को किसी दृश्य मॉडल पर दृढ़ता से टाइप किया गया है, तो आपको ऐसा नहीं करना चाहिए। आपको सीधे मॉडल का उपयोग करने में सक्षम होना चाहिए, जो किसी भी रूपांतरण को करने की आवश्यकता को हटा देता है।
यति

@ यति: गलत। एक अच्छा कारण है कि मचान तंत्र आईडी फ़ील्ड को जोड़ता है। इसे मेरे किसी ट्यूटोरियल से निकालें और यह देखने के लिए फ़िडलर का उपयोग करें कि यह पोस्ट बॉडी में नहीं है।
रिकएंडएमएसएफटी

2
मुझे यकीन नहीं है कि टिप्पणी कैसे गलत है। यदि मॉडल संपत्ति के लिए () दृश्य में है, तो नियंत्रक विधि को दृढ़ता से टाइप किया जाना चाहिए, और स्वचालित रूप से मॉडलबाइंडर द्वारा पॉप्युलेट किया जाना चाहिए।
एरिक फिलिप्स

2

बहुत सारे कार्यों की तरह, इस एक का उपयोग कई अलग-अलग तरीकों से कई अलग-अलग समस्याओं को हल करने के लिए किया जा सकता है, मुझे लगता है कि यह हमारे टूलबेल्स में एक और उपकरण है।

अब तक, चर्चा ने केवल एक आईडी छिपाने पर बहुत अधिक ध्यान केंद्रित किया है, लेकिन यह केवल एक ही मूल्य है, इसका उपयोग बहुत सारे मूल्यों के लिए क्यों नहीं किया जाता है! यह वही है जो मैं कर रहा हूं, मैं एक समय में केवल एक दृश्य में मानों को लोड करने के लिए इसका उपयोग करता हूं, क्योंकि html.beginform एक नई वस्तु बनाता है और अगर उस दृश्य के लिए आपके मॉडल ऑब्जेक्ट में पहले से ही कुछ मान थे, तो मूल्यों को तब तक खो दिया जाएगा जब तक आप शुरुआती में उन मूल्यों का संदर्भ नहीं देते।

HTML.hiddenfor के लिए एक महान प्रेरणा देखने के लिए, मैं आपको .NET MVC में एक व्यूअर से कंट्रोलर को डेटा देखने की सलाह देता हूं - "@model" हाइलाइटिंग नहीं


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.