Bir eylem bağlantısında alan adı nasıl belirtilir?


156

Benim mvc 2 app 2 farklı alanlardan kullanıyorum paylaşılan bir ana sayfa var. Ana sayfada şu anda denetleyiciyi ve eylemi belirten bir eylem bağlantısı vardır, ancak yanlış alanda olduğumda elbette bağlantı çalışmaz. Bir alan parametresini alan actionlink için aşırı yük görmüyorum, bunu yapmak mümkün mü?

Yanıtlar:


245

Anladım ..

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

3
@ Pure.Krome - evet. Bu konuda sezgisel bir şey yok!
Jeremy

3
Alan adından önce veya sonra boşluk olmadığından emin olun. Aksi halde görmezden gelir ... ve sonra neyin yanlış olduğunu dört saat merak etmenizi sağlar .. tıpkı benim gibi.
Piotr Kula

Oraya parametreleri nasıl eklersiniz?
Yorro

Bu bağlantıya nasıl benziyor? Yani - form işlendiğinde ve istemciye döndüğünde.
FrenkyB

79

Bundan sonra karşılaştığım bir şey, başkalarının da karşılaşabileceğini hayal ediyorum: Bir alandan bir alandaki olmayan bir eylemle bağlantı kurmanız gerekiyorsa, yine de Alanı boş dize olarak belirtmeniz gerekir.

Örneğin, bazı MVC kodunu bir alana taşıdım ve sitedeki diğer sayfalara başvuruda bulunan ana sayfadaki URL'leri güncellemem gerektiğini buldum.

Alanda olmayan bir şeyin URL'sini belirtmek için şunu kullanın:

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

4
Bu çok iyi bir ipucu! Ancak MVC 2 ile beklenen sonuçlar vermiyor. Küçük düzeltme - Html.ActionLink ("home", "Index", yeni {area = "", denetleyici = "Home"})
Alexander Beletsky

15

kullanın:

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

Not : 4. parametre rotayı Valuesgeçmektir, boş bir parametreyi geçerseniz kök yapısını dikkate alır ve uygun değeri geçerseniz onu alan olarak kullanır.

Ayrıca nullveya new{}5. parametre olarak kullanmayı unutmayın, çünkü eylem bağlantısı oluşturulurken nullveya new {}oluşturulurken yöntemi aşırı yüklemez (text,action,controller,route data)veya bu (text,action,controller,route data,html attribute)nedenle uygun yöntemi kullanır.


11

MVC2 vermek area="root"benim için aşağıdaki gibi çalıştı

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

6

Bir Görünümde çok fazla alan kullanıyorsanız yapabileceğiniz düzgün bir numara, onu üst kısımdaki bir değişken olarak tanımlamaktır:

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

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

4

İşte bir kullanıcının önceden oluşturulmuş kimlik doğrulama sistemlerine bağlanmasına izin vermek için bir çözüm olarak buldum.

Bölgelerimin her birinin _LoginPartial.cshtml dosyasının bir sürümü var.

Muhtemelen dosyanın tek bir sürümünü kullanmak için uygulama alabilir, ancak tek bir giriş kısmi kullanmaya çalışırken hatalarla çalışmaya devam etti.

Orijinal oluşturulan giriş bölümünde sadece küçük bir değişikliktir, ancak belirli alanlarda kullanıldığında iyi çalışır gibi görünüyor.

İşte hepsinde kullanılan kod:

@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:Birden çok parametre kullanmak için açıkça çok iyi ayarlanmış .
Travis J

2

Alandan Hakkında, Ev, İletişim gibi standart web uygulama bağlantısını kullanamazsanız. Satırları değiştir

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

itibaren

Görünümler \ Shared_Layout.cshtml


1

Benim ASP Net Core uygulamasında, ben sadece html özniteliklerine alanı şöyle ekleyin:

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

0

kullanma

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

Sonra olmak ne elde edecek.

<a href="#">DisplayText</a>DisplayText görüntülenecek olan (ile aynı ), ActionName denetleyicide çağrılan yöntemdir ve ControllerName açıkçası aramak istediğiniz denetleyicidir! Bir sonraki parametre, bölgenizi ekleyeceğiniz 'Rota Değeri'dir. Şu anda bir Bölgede bulunuyorsanız ve Home/Indexörneğin kökünüze geri dönmek istiyorsanız, değeri boş bir dize olarak bırakırsınız, örn new { area = ""}. Son değer 'Html Attributes' ve eğer dilerseniz bir sınıf ekleyeceğiniz yerdir ve nulleğer eklemek için herhangi bir niteliğiniz yoksa bir olmalıdır . Ancak son parametre 'Html Attributes' olarak görüldüğü için; Güzergah Değerlerinin tanınabilmesi için bununnull

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.