एक्शन लिंक में क्षेत्र का नाम कैसे निर्दिष्ट करें?


156

मेरा एक साझा मास्टर पेज है जिसे मैं अपने mvc 2 ऐप में 2 अलग-अलग क्षेत्रों से उपयोग कर रहा हूं। मास्टर पेज में एक एक्शन लिंक है जो वर्तमान में नियंत्रक और कार्रवाई को निर्दिष्ट करता है, लेकिन निश्चित रूप से लिंक गलत काम नहीं करता है अगर मैं गलत क्षेत्र में हूं। मुझे एक्शनलिंक के लिए कोई अधिभार नहीं दिखता है जो एक क्षेत्र पैरामीटर लेता है, क्या ऐसा करना संभव है?

जवाबों:


245

पता लगा लिया..

Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" }, new{})

3
@ Pure.Krome - हाँ। इसके बारे में कुछ भी सहज नहीं है!
जेरेमी

3
सुनिश्चित करें कि एरियानाम से पहले या बाद में सफेद स्थान नहीं है। नहीं तो यह सिर्फ इसे नजरअंदाज करेगा ... और फिर आपको आश्चर्यचकित करेगा कि चार घंटे क्या गलत है .. मेरी तरह।
पायोत्र कुला

आप वहां पैरामीटर कैसे जोड़ते हैं?
योरो

यह लिंक में अनुवादित कैसे दिखता है? मेरा मतलब है - जब फॉर्म प्रदान किया जाता है और क्लाइंट को वापस किया जाता है।
FrenkyB

79

कुछ मैं इसके ठीक बाद भागा, जिसकी मैं कल्पना करता हूं कि अन्य लोग इसमें भाग सकते हैं: यदि आपको किसी क्षेत्र से किसी क्षेत्र में कार्रवाई करने की आवश्यकता नहीं है, तो आपको अभी भी क्षेत्र को रिक्त स्ट्रिंग के रूप में निर्दिष्ट करने की आवश्यकता है।

उदाहरण के लिए, मैंने कुछ MVC कोड को एक क्षेत्र में स्थानांतरित किया, और पाया कि मुझे साइट पर अन्य पृष्ठों को संदर्भित करने वाले मास्टर पेज में यूआरएल अपडेट करने की आवश्यकता है।

एक क्षेत्र में कुछ नहीं करने के लिए एक यूआरएल निर्दिष्ट करने के लिए, का उपयोग करें

Html.ActionLink("home", "Index", new { area = "", controller = "Home" })

4
यह एक बहुत अच्छा टिप है! लेकिन यह MVC 2 के साथ अपेक्षित परिणाम नहीं देता है। छोटा सुधार - Html.ActionLink ("होम", "इंडेक्स", नया {क्षेत्र = "", कंट्रोलर = "होम"})
अलेक्जेंडर बेलेटस्की

15

उपयोग:

 Html.ActionLink("Text", "ActionName", "ControllerName", new { Area = "AreaName" }, null)

नोट : 4 वाँ पैरामीटर रूट पास करने के लिए है Values, यदि आप एक खाली पैरामीटर पास करते हैं तो यह रूट संरचना पर विचार करेगा और यदि आप उपयुक्त मान पास करते हैं तो इसे क्षेत्र के रूप में उपयोग करते हैं।

5 वें पैरामीटर के रूप में उपयोग करना nullया भूलना न भूलें new{}क्योंकि एक्शन लिंक बनाते nullया पास new {}करते समय (text,action,controller,route data)इसके (text,action,controller,route data,html attribute)लिए उचित विधि का अधिभार नहीं होगा।


11

MVC2 में area="root"मेरे लिए नीचे दिए अनुसार काम किया

Html.ActionLink("Home", "Index", "Home", new { Area = "root" }, new{})

6

यदि आप किसी दृश्य में किसी क्षेत्र का उपयोग कर रहे हैं, तो एक साफ-सुथरी चाल इसे शीर्ष पर एक चर के रूप में परिभाषित कर सकती है:

@{ var awesomeArea = new { area = "Awesome" }; }

@Html.Action("Something", "Somewhere", awesomeArea)
@Html.ActionLink("Stuff", "FooBar", awesomeArea)

4

यहां मैं एक समाधान के रूप में आया हूं जो उपयोगकर्ता को पूर्व-निर्मित प्रमाणीकरण प्रणालियों से लिंक करने की अनुमति देता है।

मेरे प्रत्येक क्षेत्र में _LoginPartial.cshtml फ़ाइल का एक संस्करण है।

मैं शायद फ़ाइल के एकल संस्करण का उपयोग करने के लिए एप्लिकेशन प्राप्त कर सकता हूं, हालांकि मैं एक ही लॉगिन आंशिक का उपयोग करने की कोशिश करते समय त्रुटियों में भागता रहा।

यह मूल उत्पन्न लॉगिनपार्टी के लिए केवल एक मामूली संशोधन है, लेकिन विशिष्ट क्षेत्रों में उपयोग किए जाने पर यह अच्छी तरह से काम करता है।

यहाँ कोड है कि उन सभी में इस्तेमाल किया जाता है:

@if (Request.IsAuthenticated)
{
    <text>
    Hello, @Html.ActionLink(User.Identity.Name, "Manage", "Account", new { area = "" }, htmlAttributes: new { @class = "username", title = "Manage" })!
    @using (Html.BeginForm("LogOff", "Account", new { area = "" }, FormMethod.Post, new { id = "logoutForm" }))
 {
        @Html.AntiForgeryToken()
        <a href="javascript:document.getElementById('logoutForm').submit()">Log off</a>
 }
    </text>
}
else
{
    <ul>
        <li>@Html.ActionLink("Register", "Register", "Account", new { area = "" }, htmlAttributes: new { id = "registerLink" })</li>
        <li>@Html.ActionLink("Log in", "Login", "Account", new { area = "" }, htmlAttributes: new { id = "loginLink" })</li>
    </ul>
}

स्पष्ट रूप से htmlAttributes:कई मापदंडों का उपयोग करने के लिए बहुत अच्छी तरह से काम किया।
ट्रैविस जे

2

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

@Html.ActionLink("Ana Sayfa", "Index", "Home", new { area = "" }, new {})

से

दृश्य \ Shared_Layout.cshtml


1

मेरे एएसपी नेट कोर ऐप में, मैं बस html विशेषताओं के लिए क्षेत्र जोड़ता हूं:

@Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" , id = @Model.ID, name = @Model.name })

0

का उपयोग करते हुए

@Html.ActionLink("DisplayText", "ActionName", "ControllerName", new { area = "AreaName"}, null)

आप जो हैं उसके बाद हासिल करेंगे।

DisplayText वह है जो प्रदर्शित करेगा (जैसा है <a href="#">DisplayText</a>), ActionName कंट्रोलर में कॉल की जाने वाली विधि है और कंट्रोलरनाम स्पष्ट रूप से वह नियंत्रक है जिसे आप कॉल करना चाहते हैं! अगला पैरामीटर 'मार्ग मूल्य' है जहां आप अपना क्षेत्र जोड़ेंगे। यदि आप वर्तमान में किसी क्षेत्र में हैं और Home/Indexउदाहरण के लिए अपने रूट पर वापस नेविगेट करना चाहते हैं , तो आप मान को एक रिक्त स्ट्रिंग, उदा new { area = ""}। अंतिम मान 'Html Attributes' है और यदि आप चाहें तो एक वर्ग जोड़ेंगे और यदि आपके nullपास जोड़ने के लिए कोई विशेषता नहीं है, तो होना चाहिए । लेकिन जैसा कि अंतिम पैरामीटर 'एचटीएमएल गुण' के रूप में देखा जाता है; रूट वैल्यू के लिए मान्यता प्राप्त है, यह होना चाहिएnull

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