3

私は、それがAJAX呼び出しであるか子アクションであるかを普遍的に決定するある種のクラスを構築しようとしてGoogleを燃やしました。コントローラーが部分ビューまたは完全ビューのどちらを返すかを判断できるようにします。これまでのところ、私はあまり運がありませんでした。現時点では、これを実現するために次のコードを使用しています。

 if (Request.IsAjaxRequest() || ControllerContext.IsChildAction)
            {
                return PartialView();
            }
 return View();

問題は、コントローラーのすべてのアクションと遭遇するすべての条件でこれを行う必要があることですが、ヘルパーを介してこれを達成する方法があると確信していますが、方法がわかりません。これを実現するためのリンク/サンプルコードを教えてください。

編集:

@Aronコントローラー全体が長すぎるため、コードを投稿しました。しかし、あなたは私の苦境を見ることができます。戻り値には、View と Object/Model "k" が含まれます。

public ActionResult _Details_Message(int id = 0, int CId = 0)
        {
            ViewBag.MrnSortParm = CId;
            if (id != 0)
            {
                var k = mrn.MRNS.Where(u => u.Id == id).SingleOrDefault();
                if (k.To == User.Identity.Name)
                {
                    if (k.Type == 0) // message
                    {
                        k.Read = true;
                        mrn.Entry(k).State = EntityState.Modified;
                        mrn.SaveChanges();
                    }
                    return PartialView("_Details_Message", k);//replace the above code here
                }
                if (k.From == User.Identity.Name)
                {
                    return PartialView("_Sent", k); //replace the above code here
                }
            }
            var m = new message();
            m.CourierId = CId;
            return PartialView("_Create_Message", m); //replace the above code here
        }

編集2 ヘルパー関数ではなく、ビューの変更であるという答えが見つかりました。リンクはこちら. 自分の質問を重複としてマークできます:(

4

3 に答える 3

1

ドミトリーの答えの改善:

複数のビューに変更を追加する必要がないように、カスタム WebViewPage クラスを作成します (_ViewStart ファイルではなく、ビュー自体によって決定される複数のレイアウト ファイルがある場合に関連します)。

public abstract class CustomWebViewPage: WebViewPage
{
    public override string Layout
    {
        get
        {
            return Request.IsAjaxRequest() || ViewContext.IsChildAction ? null : base.Layout;
        }
        set
        {
            base.Layout = value;
        }
    }
}

public abstract class CustomWebViewPage<TModel>: CustomWebViewPage
{
}

また、web.config (Views フォルダーの下) で

<pages pageBaseType="Fully.Qualified.Namespace.CustomWebViewPage">
于 2015-01-08T12:02:22.793 に答える