У меня довольно простой single-page application
, который использует AJAX
для загрузки и замены содержимого страницы. Приложение должно позволить пользователю добавлять телефонные номера клиенту. После того, как пользователь загрузит view
, чтобы добавить новый номер телефона, нажав на странице Ajax.ActionLink
на странице клиентов, он может отправить форму AJAX
с номером, который будет добавлен, и если значение представляет собой номер, он должен быть перенаправлен обратно на страницу клиентов. Вот где я застрял, как мне вернуть результат другого action
? Кажется, что я не могу использовать RedirectToAction
, так как он возвращает 302
, и браузер инициирует запрос GET
, который не разрешает глагол в моей ситуации, в результате браузер возвращает 404
.RedirectToAction в одностраничном приложении
Итак, у меня есть два controllers
, PhoneBookController
и CustomersController
. нагрузки пользователя Customers/Details
view
и нажимает на Ajax.ActionLink
, который называют PhoneBook/Add
action
, это action
возвращают view
с AJAX
формой, которая представляется на PhoneBook/Create
action
.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Phone ph, string Caller)
{
if (ModelState.IsValid)
{
ph.Active = true;
db.PhoneBook.Add(ph);
db.SaveChanges();
/*->*/ return RedirectToAction("Details", "Customers", new { Id = ph.CustomerId }); //what should be used instead?
}
return PartialView("Add", ph);
}
Как обычно выполняются такие задачи?
Ну, это не должно быть 'window.location', но у меня есть идея. Единственная проблема здесь в том, что если «ModelState.IsValid» я собираюсь отправить «JSON», а если нет, то тот же вид должен быть загружен с ошибками проверки. и как я могу понять, какой из них был возвращен? 'Ajax.ActionLink (« Добавить новый номер »,« », новый AjaxOptions {HttpMethod =" POST ", UpdateTargetId =" main-content ", Url = Url.Action (" Добавить "," Телефонная книга ", новый {CustomerId = Model .BaseCustomer.Id})}) ', поэтому я могу добавить let say' OnSuccess = "(function (response) {...}) (data)" ', но как узнать, что ответ имеет представление или URL? – Jyrkka
@Jyrkka Я бы просто передал данные json и обновил интерфейс. Вы можете выводить ошибки проверки таким образом: http://stackoverflow.com/questions/28987752/jquery-post-and-unobtrusive-ajax-validation-not-working-mvc-4/28989183#28989183 – hutchonoid
Кажется, что мне нужно Ваша помощь здесь также, очевидно, '$ .validator.unobtrusive.parse ($ form)' не может использоваться, поскольку $ form не определен. если я перехожу в 'document' вместо' $ form', сообщения об ошибках отображаются только после второго нажатия кнопки отправки? – Jyrkka