ASP.NET Razor'da HTML.ActionLink ve Url.Action


304

HTML.ActionLinkVs arasında herhangi bir fark var mı Url.Actionya da aynı şeyi yapmanın sadece iki yolu var mı?

Ne zaman diğerini tercih etmeliyim?

Yanıtlar:


508

Evet, bir fark var. Html.ActionLinkbir <a href=".."></a>etiket oluşturur, Url.Actionyalnızca bir URL döndürür.

Örneğin:

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

oluşturur:

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

ve Url.Action("someaction", "somecontroller", new { id = "123" })üretir:

/somecontroller/someaction/123

Alt denetleyici eylemini yürüten Html.Action da vardır .


14
@PankajUpadhyay, bir asp.net mvc uygulamasında urllerle uğraşırken her zaman html veya url yardımcılarını kullanmalısınız. Yüzlerce bağlantınız olsa bile, Html.ActionLinkbunları oluşturmak için kullanın . Bu tür mikro optimizasyonlar yapmaya çalışmayın. Sonuçlarınızda çirkin kodlarla karşılaşacaksınız.
Darin Dimitrov

2
dat, Html.ActionLink () 'i bir bağlantı oluştururken tüm durumlarda Url.Action yerine tercih etmem gerektiği anlamına gelir. BTW, o zaman neden asp.net web sitesinde Microsoft resmi öğretici (MVC Müzik Mağazası) bir bağlantı gerektiğinde çoğu zaman Url.Action'ı kullandı.
Pankaj Upadhyay

7
@PankajUpadhyay, bir bağlantı etiketi ( <a>) oluşturmanız gerektiğinde Html.ActionLink kullanın . Yalnızca bir url oluşturmanız gerektiğinde Url.Action'ı kullanın (bu, bir denetleyici eyleminde de kullanılabilir).
Darin Dimitrov


3
Bunun eski bir yazı olduğunu biliyorum, ama deneyimden öğrenilen bir şey. Url.Actionçok daha performanslıdır Html.ActionLink. 2 olan 6.000 öğeden oluşan bir listem vardı Html.ActionLinks. Listenin oluşturulması 6.600 ms sürdü. Bu olmadan Html.ActionLinks52 ms sürdü. Kullanarak Url.Action270 ms sürdü. Verilen 6000 öğe büyük bir listedir, ancak ileride başvurmak üzere ekleyeceğimi düşündüm.
roberocity

42

Html.ActionLink<a href=".."></a>otomatik olarak bir etiket oluşturur .

Url.Action yalnızca bir url oluşturur.

Örneğin:

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

oluşturur:

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

ve

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

oluşturur:

/controllerName/actionName/<id>

Sevdiğim en iyi artı noktası Url.Action(...)

Kendi bağlı metninizi başka bir html etiketi ile bile kolayca ayarlayabileceğiniz kendi başınıza çapa etiketi oluşturuyorsunuz.

<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>
}

Yukarıdaki örnekte, özellikle bazı eylemleri yapmak için bir düğmeye ihtiyacım varsa, @ Url.Action ile yapmam gerektiğini, ancak sadece bir bağlantı istiyorsanız @ Html.ActionLink kullanacağımı görebilirsiniz. Buradaki nokta, eylem url'si ile bazı öğeler (HTML) kullanmanız gerektiğidir.


10

@HTML.ActionLinka üretir HTML anchor tag. Süre sizin için @Url.Actionbir üretir URL. Bunu kolayca anlayabilirsiniz;

// 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>

Bu yaklaşımların her ikisi de farklıdır ve tamamen ihtiyacınıza bağlıdır.


2

Html.ActionLink'i uygun CSS stilini kullanarak kolayca bir düğme olarak sunabilirsiniz . Örneğin:

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

5
Bu, HTML.ActionLink ile Url.Action arasındaki farkın ne olduğu konusunda orijinal soruya cevap vermiyor gibi görünüyor. Belki cevap yerine bir yorum kullanmalısınız.
Fencer04

Cevabınız orijinal sorguyu eğlendirmiyor.
Arsman Ahmad

0

Bir Düğme oluşturmak için aşağıdaki kodu kullandım ve benim için çalıştı.

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

1
Bence soruyu tekrar okumalısın. @Pankaj Upadhyay tamamen farklı bir şey istiyor.
Arsman Ahmad
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.