HTML.ActionLink बनाम Url.Action ASP.NET रेजर में


304

क्या HTML.ActionLinkबनाम के बीच कोई अंतर है Url.Actionया वे एक ही काम करने के सिर्फ दो तरीके हैं?

मुझे कब एक पर दूसरे को पसंद करना चाहिए?

जवाबों:


508

हां, वहां एक अंतर है। Html.ActionLinkएक <a href=".."></a>टैग बनाता है जबकि Url.Actionकेवल एक url देता है।

उदाहरण के लिए:

@Html.ActionLink("link text", "someaction", "somecontroller", new { id = "123" }, null)

उत्पन्न करता है:

<a href="/somecontroller/someaction/123">link text</a>

और Url.Action("someaction", "somecontroller", new { id = "123" })उत्पन्न करता है:

/somecontroller/someaction/123

Html.Action भी है जो एक बच्चे नियंत्रक कार्रवाई को निष्पादित करता है।


14
@PankajUpadhyay, आपको asp.net mvc एप्लिकेशन में url से निपटने के दौरान हमेशा html या url सहायकों का उपयोग करना चाहिए। यहां तक ​​कि अगर आपके पास लिंक के सौवें हिस्से हैं, तो Html.ActionLinkउन्हें उत्पन्न करने के लिए उपयोग करें। ऐसी माइक्रो ऑप्टिमाइज़ेशन करने की कोशिश न करें। आप अपने विचारों में बदसूरत कोड के साथ समाप्त हो जाएगा।
डारिन दिमित्रोव

2
Dat का मतलब है कि मुझे एक लिंक प्रदान करने से संबंधित सभी स्थितियों में Url.Action पर Html.ActionLink () पसंद करना चाहिए। BTW, तब asp.net वेबसाइट पर Microsoft आधिकारिक ट्यूटोरियल (MVC म्यूज़िक स्टोर) ने उरल का उपयोग कैसे किया। जब भी किसी लिंक की आवश्यकता होती है।
पंकज उपाध्याय

7
@PankajUpadhyay, जब आप एक एंकर टैग ( <a>) उत्पन्न करने की आवश्यकता हो तो Html.ActionLink का उपयोग करें । Url का उपयोग करें। जब आपको केवल एक url उत्पन्न करने की आवश्यकता हो (इसका उपयोग नियंत्रक क्रिया में भी किया जा सकता है)।
डैरिन दिमित्रोव

3
@ शमी, आप इसके बारे में यहां पढ़ सकते हैं: haacked.com/archive/2009/11/17/aspnetmvc2-render-action.aspx
डारिन दिमित्रोव

3
मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन अनुभव से कुछ सीखा है। Url.Actionकी तुलना में बहुत अधिक प्रदर्शन है Html.ActionLink। मेरे पास 6,000 वस्तुओं की एक सूची थी जिसमें 2 थे Html.ActionLinks। इस सूची को प्रस्तुत करने में 6,600 किलोमीटर का समय लगा। इसके बिना Html.ActionLinks52ms लगते थे। इसके इस्तेमाल से Url.Action270 मी। दी गई, 6000 आइटम एक बड़ी सूची है, लेकिन मुझे लगा कि मैं इसे भविष्य में संदर्भ के लिए जोड़ूंगा।
रोज़बेरोज़

42

Html.ActionLinkएक <a href=".."></a>टैग स्वचालित रूप से उत्पन्न करता है ।

Url.Action केवल एक यूआरएल उत्पन्न करता है।

उदाहरण के लिए:

@Html.ActionLink("link text", "actionName", "controllerName", new { id = "<id>" }, null)

उत्पन्न करता है:

<a href="/controllerName/actionName/<id>">link text</a>

तथा

@Url.Action("actionName", "controllerName", new { id = "<id>" }) 

उत्पन्न करता है:

/controllerName/actionName/<id>

सबसे अच्छा प्लस पॉइंट जो मुझे पसंद है वह उपयोग कर रहा है Url.Action(...)

आप अपने द्वारा एंकर टैग बना रहे हैं जहां आप अपने स्वयं के लिंक किए गए पाठ को आसानी से कुछ अन्य HTML टैग के साथ भी सेट कर सकते हैं।

<a href="@Url.Action("actionName", "controllerName", new { id = "<id>" })">

   <img src="<ImageUrl>" style"width:<somewidth>;height:<someheight> />

   @Html.DisplayFor(model => model.<SomeModelField>)
</a>

12
<p>
    @Html.ActionLink("Create New", "Create")
</p>
@using (Html.BeginForm("Index", "Company", FormMethod.Get))
{
    <p>
        Find by Name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
        <input type="submit" value="Search" />
        <input type="button" value="Clear" onclick="location.href='@Url.Action("Index","Company")'"/>
    </p>
}

उपरोक्त उदाहरण में आप देख सकते हैं कि यदि मुझे कुछ कार्रवाई करने के लिए विशेष रूप से एक बटन की आवश्यकता है, तो मुझे इसे @ Url.Action के साथ करना होगा जबकि यदि मुझे केवल एक लिंक चाहिए तो मैं @ Html.ActionLink का उपयोग करूंगा। बिंदु यह है कि आपको एक्शन यूआरएल के साथ कुछ तत्व (HTML) का उपयोग करना है।


10

@HTML.ActionLinkएक उत्पन्न करता है HTML anchor tag। जबकि आपके लिए @Url.Actionउत्पन्न करता है URL। आप इसे आसानी से समझ सकते हैं;

// 1. <a href="https://stackoverflow.com/ControllerName/ActionMethod">Item Definition</a>
@HTML.ActionLink("Item Definition", "ActionMethod", "ControllerName")

// 2. /ControllerName/ActionMethod
@Url.Action("ActionMethod", "ControllerName")

// 3. <a href="https://stackoverflow.com/ControllerName/ActionMethod">Item Definition</a>
<a href="@Url.Action("ActionMethod", "ControllerName")"> Item Definition</a>

ये दोनों दृष्टिकोण अलग-अलग हैं और यह पूरी तरह से आपकी जरूरत पर निर्भर करता है।


2

आप आसानी से उपयुक्त CSS शैली का उपयोग करके एक बटन के रूप में Html.ActionLink प्रस्तुत कर सकते हैं । उदाहरण के लिए:

@Html.ActionLink("Save", "ActionMethod", "Controller", new { @class = "btn btn-primary" })

5
यह मूल प्रश्न का उत्तर देने के लिए प्रकट नहीं होता है कि HTML.ActionLink बनाम Url.Action में क्या अंतर है। शायद आपको जवाब के बजाय टिप्पणी का उपयोग करना चाहिए।
फेन्सर ०४

आपका उत्तर मूल क्वेरी को मनोरंजक नहीं करता है।
अरस्मान अहमद

0

मैंने एक बटन बनाने के लिए नीचे दिए गए कोड का उपयोग किया और यह मेरे लिए काम आया।

<input type="button" value="PDF" onclick="location.href='@Url.Action("Export","tblOrder")'"/>

1
मुझे लगता है, आपको प्रश्न फिर से पढ़ना होगा। @ पंकज उपाध्याय बिलकुल अलग बात पूछ रहे हैं।
अरस्मान अहमद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.