MVCアクションから戻されるビューに応じて部分ビューがロードされるdivを設定する方法はありますか?たとえば、MVCコントローラアクションは、いくつかのロジックに応じて2つのビュー(View AまたはView B)のいずれかを返すことができます。 'View A'が返されると、Ajax呼び出しのdone関数で 'div A'にロードされますが、 'View B'が返された場合は 'div B'にロードされます。MVC Ajaxの部分ビュー - どのビューが返されるかによって異なるdivにロードする
public ActionResult SomeActionMethod()
{
if (someCondition == true) {
return PartialView("ViewA", new SomeModel());
}
else {
return PartialView("ViewB", new AnotherModel());
}
}
.done(function(data) {
if (isViewA === true) { // How do I determine which view it is?
$('#div-a').html(data);
} else {
$('#div-b').html(data);
}
})
これは(それがビューAまたはビューBかどうかを決定するために)行うには知られて/受け入れられた方法はありますか?私はこれを行う2つの方法を考えましたが、どちらもちょっとハッキリしているようです。これを行うための一般的に受け入れ/承認された方法は何がある場合は、次のアイデアがありません大丈夫...
アイデア1:
検索は、そのビューで見られるユニークな要素や隠し入力値のHTMLを返さ。これは返されるデータが単純なhtmlではなく、ネストされた文字列/オブジェクト(実際にはわからない)の一種であるため、最初に聞こえるほど簡単ではありません。最上位要素の場合は、jQueryの 'filter'メソッドを使用する必要があります。それ以外の場合は、 'find'メソッドを使用してください。
アイデア2:コントローラのアクションで
、(ビューA)返されるビューのいずれかのために、既に使用されていない200の範囲のカスタム値にResponse.StatusCode設定(ありません200-208,226)。次に、ajax done関数で、3つのパラメータをすべて指定し、コントローラのアクションで設定した応答ステータスと比較するために、3番目のパラメータstatusプロパティを確認します。
if (someCondition == true) {
Response.StatusCode = 299;
return PartialView("ViewA", new SomeModel());
}
else {
return PartialView("ViewB", new AnotherModel());
}
.done(function(data, textStatus, jqXHR) {
if (jqXHR.status === 299) {
// It’s View A so load it into div A
}
else {
// It’s View B so load it into div B
}
})
これは魔法のように動作しますが、さらに多くのハックアイデア1より
1つのオプションは、([この答え]を参照(http://stackoverflow.com/questions/4730777/mvc-return-partial-view-as-json))ようにJSONとしてビューを返すことですビューとそれを表示する別の値の両方を返すことができるので、 'if(data.ViewName == ??){...'のようなものを使うことができます –
レイアウトやビューで 'someCondition'を評価できますか?もしそうなら、あなたはビューから 'RenderAction'を呼び出すことができ、二つの別々のコントローラを持つことができます。 – Khyron
@Khyronあなたが正しく言ってもらいたいと分かっていれば、RenderActionはAjax呼び出しで返されるビューに影響を与えますが、どのdivにロードするかを判断するのに役立ちません。 –