#asp.net-mvc-3 #redirect #routing
#asp.net-mvc-3 #перенаправление #маршруты
Вопрос:
Я использую jquerymobile и asp.net Бритва MVC3. Я несколько новичок в этом, но, чтобы разобраться, у меня есть очень простая таблица маршрутов, в которой есть только маршрут игнорирования для .axd
ресурсов и маршрут по умолчанию:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "", UrlParameter.Optional }
);
У меня есть ссылка на действие, которая работает на странице .ascx:
@Html.ActionLink("Log On", "LogOn", "Account", null, new { @class = "ui-btn-right" })
Теперь, когда я попадаю на страницу входа в систему и завершаю проверку учетной записи, мне нужно отправить их на домашнюю страницу, /Home/Home
которая работает, если я ввожу ее в адресную строку, но, похоже, я не могу заставить свое перенаправление работать в контроллере учетной записи: return RedirectToAction("Home", "Home");
Спасибо за любую помощь!
Комментарии:
1. Я борюсь с точной проблемой, вы нашли решение, пожалуйста, ответьте на ваш вопрос. Я использую те же технологии, которые используете вы.
2. @Sutikshan Dubey — Нет, я этого не делал, я назначу награду за это и посмотрю, сможет ли кто-нибудь помочь 🙂
3. Во-первых, я не знаю, поможет ли это решить вашу проблему, поэтому я представлю это как комментарий вместо ответа, но ваш маршрут по умолчанию настроен немного странно. id = «», UrlParameter. Необязательным должно быть: id = UrlParameter. Необязательно
Ответ №1:
Похоже, что, возможно, вы отправляете свою форму из / Account / LogOn через ajax. Это означает, что при вас return RedirectToAction("Home", "Home");
страница не изменится. Итак, вам просто нужно не использовать ajax для отправки формы. Если мое предположение неверно, пожалуйста, опубликуйте больше кода, чтобы мы могли получить представление о том, в чем проблема.
Из документации следует, что jQuery mobile автоматически обрабатывает записи формы через ajax. Чтобы предотвратить это, добавьте data-ajax="false"
атрибут к элементу формы. Документация здесь:http://jquerymobile.com/test/docs/forms/forms-sample.html
Комментарии:
1. Я использую jQueryMobile, так что да, я почти уверен, что он делает ajax post. Есть ли хороший способ решить эту проблему, используя jQueryMobile?
2. Кстати, я не знаком с jQuery mobile, поэтому, возможно, вы хотите опубликовать через ajax, а затем просто заменить свою страницу тем, что передано обратно вашей функции успеха.
3. Да, это то, что они делают, публикуют через ajax, а затем заменяют страницу. Если я хочу продолжить движение по этому маршруту, не отключая ajax, есть ли хороший метод для использования вместо «RedirectToAction ()»?
4. нет, для вашего сервера не должно иметь значения, что делает ваш клиент. Однако на полностью ajax-сайте я бы предложил использовать только return PartialView() из всех ваших действий. Затем вы можете отправить HTML, возвращенный с сервера, таким образом, в соответствующую часть страницы (обновлять только то, что необходимо, похоже, является целью этого ajax в качестве парадигмы по умолчанию).
5. Но что, если пользователь запрашивает эту страницу с самого начала, а не просто из запроса Ajax? разве они не получат полную страницу?
Ответ №2:
Учитывая то, что написано в документации, не могли бы вы поместить свой код в элемент формы и установить его свойство action в /Account / LogOn ? Для того, чтобы сделать это, вам, возможно, придется преобразовать вашу ActionLink в кнопку.
Ответ №3:
Вы можете проверить наличие запроса ajax в контроллере:
if(Request.IsAjaxRequest())
{
//send json object and do navigate in client
return Json(new {IsLogged = true});
}
else
{
//send redirect html code to browser
return RedirectToAction("Home", "Home");
}
и на стороне клиента проверьте результат в формате json, если вы отправляете форму с помощью jQuery ajax.
Я не использую jquerymobile, поэтому я не знаю, как это работает на стороне клиента.
Комментарии:
1. Но я хочу, чтобы этот ajax-запрос возвращал страницу, потому что клиентская сторона jQueryMobile извлекает новые страницы через ajax.