1

pjaxを実装している 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;
    }

部分ビューをメイン ビューに貼り付けて #update_panel に部分ビューを挿入するにはどうすればよいですか?

4

1 に答える 1

2

わかりました、大きなリファクタリングをしなくても、次のことができます。

@model(これは、 on index.cshtml をに設定できることを前提としていますPartDetail())。

上記のコントローラー アクションで、以下を変更します。

var mainView =  View("Index");

に:

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

次に、index.cshtml 内に以下を追加します。

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

私が言ったように、これはインデックス @model が に設定されている場合にのみ機能PartDetail()しますPartDetail()。このビューモデルは次のようになります。

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

this refactored viewmodel would be added to the index.cshtml as @model IndexViewModel and consumed by the partial as:

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

hope this makes sense.

于 2012-02-17T16:33:22.017 に答える