MVC Обратный URL Предложение

В MVC часто отображается какое-то индексное представление, из которого вызываются другие действия, например, "Редактировать". В большинстве случаев кнопка "Назад" проста для кодирования, так как мы знаем, куда мы хотим вернуться, то есть действие Index.

Тем не менее, существуют сценарии, когда некоторые действия "Редактировать" могут вызываться из нескольких мест. Теперь мы не знаем, куда вернуться.

Я пробовал различные способы передачи параметра returnUrl в действия (например, HtmlHelpers, который добавляет текущий RawUrl в качестве параметра для обработки в вызываемом действии), но у них всегда есть какой-то недостаток. В конечном итоге вам необходимо отслеживать, например, был ли вызов действия от Ajax.

Кто-нибудь нашел простое, работоспособное решение? Я разместил мой ниже

1 ответ

Я создал атрибут действия, чтобы украшать только определенные действия, такие как "Индекс". Это просто сохраняет текущий, rawUrl в сессии

public class ReturnableActionFilter : ActionFilterAttribute, IActionFilter
    {

    void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
        {

            filterContext.HttpContext.Session["ReturnUrl"] = filterContext.RequestContext.HttpContext.Request.RawUrl;

            this.OnActionExecuting(filterContext);
}

В моем частичном представлении крошки я ищу возвращаемый URL в сеансе и проверяю, является ли это текущим действием. Если нет, отображается обратный URL-адрес (мы не возвращаемся к действию, которое уже выполняем).

string returnUrl = null;

var controllerName = ViewContext.RouteData.GetRequiredString("controller");
var actionName = ViewContext.RouteData.GetRequiredString("action");

// we don't return to the same controller/action we are in
if (Session["ReturnUrl"] is string r)
{
    if (!r.StartsWith("/" + controllerName + "/" + actionName))
    {
        returnUrl = r;
    }
}

Обратная ссылка

@if (returnUrl != null)
{
    <li class="breadcrumb-item" title="Back"><a href="@(returnUrl)">&larr;Back</a></li>
}

В рамках действия я также могу посмотреть значение сеанса и вернуться после выполнения редактирования, например.

Другие вопросы по тегам