2010-10-05 19 views
11

Mam zestaw widoków, które wyświetlają się dla określonych użytkowników. Są to widoki skopiowane z innych widoków w naszej aplikacji i zmienione nieco.Asp MVC Link bezwzględnego działania Action

W tych widokach używam linku Html.Action, ale potrzebuję ich, aby zwrócić bezwzględny adres URL zamiast względnego. Wiem, że są dodatkowe parametry, które można wykorzystać do uzyskania tego efektu, ale nie jestem w stanie zmienić wszystkich linków we wszystkich moich widokach.

Idealnie chciałbym dokonać zmiany w jednym miejscu i mieć wszystkie linki renderowane w razie potrzeby. Z pewnością musi istnieć coś, co mogę ustawić, lub funkcję, którą mogę nadpisać, aby to osiągnąć.

Odpowiedz

2

Możesz utworzyć nową metodę rozszerzenia o nazwie Html.AbsoluteAction. AbsoluteAction może dodać dodatkowe parametry niezbędne do uzyskania bezwzględnego adresu URL, więc wystarczy napisać ten kod tylko raz, w niestandardowej metodzie rozszerzenia.

+0

O ile wiem, jest to jedyny sposób, aby to zrobić. Tak czy inaczej, będziesz musiał zaktualizować wszystkie linki, aby działały. Nie wiesz, jakie są powody, dla których łącza bezwzględne w Html.Action ... –

11

Napisałem wpis na blogu o nazwie How to build absolute action URLs using the UrlHelper class, w którym przedstawiam niestandardową metodę rozszerzenia o nazwie AbsoluteAction. Zachęcam do sprawdzenia!

/// <summary> 
/// Generates a fully qualified URL to an action method by using 
/// the specified action name, controller name and route values. 
/// </summary> 
/// <param name="url">The URL helper.</param> 
/// <param name="actionName">The name of the action method.</param> 
/// <param name="controllerName">The name of the controller.</param> 
/// <param name="routeValues">The route values.</param> 
/// <returns>The absolute URL.</returns> 
public static string AbsoluteAction(this UrlHelper url, 
    string actionName, string controllerName, object routeValues = null) 
{ 
    string scheme = url.RequestContext.HttpContext.Request.Url.Scheme; 

    return url.Action(actionName, controllerName, routeValues, scheme); 
} 

ASP.NET MVC zawiera wbudowane funkcje do generowania bezwzględnych adresów URL, choć nie w bardzo intuicyjny sposób.

Istnieje kilka przeciążeń metody UrlHelper.Action(), które umożliwiają przekazywanie dodatkowych parametrów, takich jak wartości trasy, protokół do użycia i nazwa hosta dla adresu URL. Jeśli używasz jakiegokolwiek przeciążenia, które pozwala określić parametr , wygenerowany adres URL będzie bezwzględny. Tak więc, następujący kod może być użyty do wygenerowania bezwzględny adres URL dla metody działania O z HomeController:

@Url.Action("About", "Home", null, "http")