Asp.Net MVC Маршрутизация для не xhr запросов с Backbone.js - PullRequest
0 голосов
/ 20 января 2012

Кто-нибудь знает, как я использую asp.net mvc маршрутизацию, чтобы заставить любой не-ajax-запрос, соответствующий контроллеру / action / id, всегда отвечать домашним индексом?

Я разрабатываю приложение Backbone.js ипытаясь использовать pushstate, поэтому у меня нет hashfragment.Проблема, с которой я сталкиваюсь, связана с URL-адресами с закладками, такими как выгружаемая сетка / CustomerDirectory / 1, отвечает json - мне нужно ответить с представлением индекса, чтобы магистраль взяла верх и инициировала сетку, используя urland-запрос json для сетки

1 Ответ

2 голосов
/ 20 января 2012

На ум приходит глобальный фильтр действий:

public class MyFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!filterContext.HttpContext.Request.IsAjaxRequest())
        {
            var rd = filterContext.RequestContext.RouteData;
            var controller = rd.GetRequiredString("controller");
            var action = rd.GetRequiredString("action");
            var id = rd.Values["id"];
            if (DoYourTest())
            {
                // Short-circuit the execution of the request action
                // by setting the result which in this case will be
                // a ViewResult to render the Home/Index view
                filterContext.Result = new ViewResult
                {
                    ViewName = "~/Views/Home/Index.cshtml"
                };
            }
        }
    }
}

, который будет зарегистрирован в Global.asax:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new MyFilter());
    ...
}
...