は、例えば、私のコントローラの[編集]アクションの次のコードを取る場合:私はこのアクションが何をしたいのか防止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
です。これをアクションフィルタ/アトリビュートに抽象化したいと思います。リダイレクトの呼び出しを中止したいのですが(既定)、リクエストが実際にAJAXリクエストであったことが検出された場合は、リダイレクトを停止してContentResult
またはJsonResult
を返します。
私のワークフローが間違っていると思われる場合は、お気軽にご返信ください。
'TryUpdateModel'が' false'とそのajaxリクエストを返すとどうなりますか? –
私はあなたのポイントを見ます。これは実際にこのコードスニペットから抜けています。これは、1つのアクションで複数のユースケースをカバーしようとするときの問題の1つです。 – mare