내 컨트롤러에 예를 들어 편집 작업에 대한 다음 코드를 보자방지 RedirectToAction() 만약 AJAX 요청
// POST: /Admin/Text/Edit/5
[HttpPost]
[ValidateInput(false)]
public virtual ActionResult Edit(TextViewModel editing)
{
if (!ModelState.IsValid)
return View(editing);
Text existing = _repository.Find(editing.Id);
if (TryUpdateModel(existing)) {
_repository.Update(existing);
if(Request.IsAjaxRequest())
return Content(bool.TrueString);
else
return RedirectToAction(pndng.Admin.Text.List());
}
else return View(editing);
}
을 내가 원하는 걸 할 수있는이 작업은 모두 고전적인 (비 AJAX form
)와 AJAX를 처리 할 것입니다 (JQuery와) POST. AJAX POST의 경우 요청이 인라인 편집 양식에서 나온 것일 가능성이 높습니다. 이 경우 작업은 Content=Ok
결과 만 반환해야합니다. 양식 페이지에서 모델을 편집하고 기본 콘텐츠 인 postback
을 수행 한 경우 사용자를 콘텐츠 목록으로 다시 리디렉션하려는 경우 (RedirectToAction()
참조)
그러나 나를 귀찮게하는 것은 if..else
절입니다. 나는 이것을 액션 필터/애트리뷰트로 추상화하고 싶다. 리다이렉션 호출을 떠나고 싶습니다. (기본값이기 때문에) 리디렉션을 중단하고 그냥 ContentResult
또는 JsonResult
을 반환한다는 의미입니다. 요청이 실제로 AJAX 요청임을 감지하면 액션 필터가 작동합니다.
내 작업 흐름이 잘못되었다고 생각되면 언제든지 회신 해주십시오.
'TryUpdateModel'이'false'와 그것의 ajax 요청을 반환한다면 어떻게 될까? –
당신의 요점을 봅니다. 실제로이 코드 스 니펫에서 누락되었습니다. 하나의 작업으로 여러 사용 사례를 다룰 때 문제가되는 부분 중 하나입니다. – mare