2012-02-17 2 views
1

私はpjaxを実装しているMVC3アプリケーションを持っています。アドレスがロードされたときにクライアント側でメインビューを持っていないときに、サーバー側で何をすべきかを除いて、すべてがうまくいっています。私のコントローラのコードは、それが#update_panelに部分図を挿入するので、私がメインビューに部分図を固執することができますどのようにMVC3でビューの特定の場所にビューの部分ビューを挿入するにはどうすればよいですか?

public virtual ActionResult Details(Guid id) 
    { 
     var partDetail = new PartDetail(id); 
     var partialView = PartialView("Details", partDetail); 
     if(Request.Headers["X-PJAX"]!= null) 
     { 
      return partialView; 
     } 

     var mainView = View("Index"); 
     // Stick Partial View into main view at #update_panel? 
     return mainView; 
    } 

のように見えますか?

答えて

2

[OK]を、大手のリファクタリングなしで、あなたは次を行うことができます。

(これは、index.cshtmlの@modelPartDetail()に設定できることを前提としています)。あなたのindex.cshtml内側その後、

var mainView = View("Index", partDetail); 

、以下を追加します:上記のあなたのコントローラのアクションで

、変更:

var mainView = View("Index"); 

<div id="update_panel">@RenderPartial("Details", Model)</div> 

私が言ったようにこれは、インデックス@modelがPartDetail()に設定されている場合にのみ機能します。それ以外の場合は、モデルの少しのリファクタリングeインデックスビューにはこのPartDetail()モデルを含める必要があります。これのviewmodelはよく次のようになります。

public class IndexViewModel 
{ 
    ModelForIndex Index{get; set;} 
    PartDetail Details{get; set;} 
} 

としてこのリファクタリングのviewmodelが@model IndexViewModelとしてindex.cshtmlに追加され、部分的で消費される:

<div id="update_panel">@RenderPartial("Details", Model.Details)</div> 

が、これは理にかなって願っています。

+0

私はあなたがそこで何をしているのかを見ています...インデックスビューをいくつかの部分的な部分のコンテナとしても使用します。私はちょうどモデルをしなければならない!=ヌルステートメント?これは主要なリファクタリングなしでも機能するかもしれませんが、私は少し肉付けしなければならないでしょう。どのような「主要な」リファクタリングをお勧めしますか? – PlTaylor

+0

上記の改正を参照してください - マイナーチェンジで動作するかもしれません(または:-)) –

+0

私は昼食後にこれを使って遊び始めますが、それはかなり良い方法ですと思います。 – PlTaylor

関連する問題