コントローラメソッドが穏やかに呼び出され、JavaScriptを介して呼び出された場合、JsonResultを返す場合、ビューを返すことは可能ですか? 私は私の見解を実現する自由を持ちたいと思っていますが、私は2つのコントローラメソッドを作成せずに、このようにしたいと考えています。asp MVC:コントローラーメソッドの呼び出し方法を決定できますか?
のは、私がブラウザでwww.example.com/person/get?id=232
に入力するとしましょうならば、私は次のような何かをするGet(int id)
方法たい:
public ActionResult Get(int id)
{
Person somePerson = _repository.GetPerson(id);
ViewData.Add("Person", somePerson);
return View("Get");
}
しかし、のは、この同じコントローラメソッドはjQueryを経由して呼び出されたとしましょう場合:
を
//controller method called asynchronously via jQuery
function GetPerson(id){
$.getJSON(
"www.example.com/person/get", //url
{ id: 232 }, //parameters
function(data)
{
alert(data.FirstName);
} //function to call OnComplete
);
}
私はそれが次のように行動したいと思う:
public JsonResult Get(int id)
{
Person somePerson = _repository.GetPerson(id);
return Json(somePerson);
}
あなたが別のアクションメソッド –
で同じ機能を使用できるように私の答えにIsAjax属性を使用することをお勧めしますブール値テストを、ViewDataオブジェクトをパラメータとして取り込む戦略パターンにカプセル化する予定です。戦略クラスの実装では、Request.IsAjaxRequest()をチェックし、ViewまたはJsonを返します。私はクラスの再利用可能性を取得し、Jsonのアプローチのための追加のメソッドを書くことから私を節約します。リポジトリから取得するロジックは2つの方法で共有されていますが、私はそれを(もちろん)複製したくありません。私はそれを周り遊び、あなたに知らせるでしょう。 – Amir