0

C# MVC 4.5 でシングル ページ アプリケーションを作成しようとしています。

私のアプリケーションでは、3 つの個別のビューを呼び出す 1 つのメイン ビューを作成します。3 つのビューはすべて、互いに独立して機能し、自動的に更新されます。

何らかの理由で、ビューがレンダリングされるときに、これら 3 つのビューのコントローラー メソッドが呼び出されません。理由はありますか?

コントローラ:

public ActionResult Index()
{
    if (!_instance.Users.CheckUserSkillsExist(WebSecurity.CurrentUserName))
    {
        return RedirectToAction("CreateChar");
    }

    _instance.GameBase.GetBaseData();

    return View();
}

public ActionResult PlayerDisplayStats()
{
    var user = _instance.Users.GetUserSkills( WebSecurity.CurrentUserName);
    var userModel = new UserModel(user);
    return View(userModel);
}

表示: Index.cshtml

<div class="span2 offset1">
        <div class="span12">
            @RenderPage("~/Views/Game/PlayerDisplayStats.cshtml");
        </div>
        <div class="span2">
            @RenderPage("~/Views/Game/GameNavigator.cshtml");        
        </div>
    </div>
    <div class="span8">
        @RenderPage("~/Views/Game/MainWindow.cshtml");        
   </div>

表示: PlayerDisplayStats.cshtml

<div class="row-fluid tileOpaque">
    <div class="span12 content">
        <div class="img avatar">               
        </div>
        <div class="span12">
            <div class="span6 stat">
                @Html.LabelFor(m => m.StrVal)
                @Html.DisplayFor(m => m.StrVal)
            </div>
            <div class="span6 stat">
                Det:
            </div>
        </div>
    </div>
</div>
4

1 に答える 1

2

あなたの問題は、@Html.Action の代わりに @RenderPage を使用していることが原因である可能性が高いと思います。@Html.Action を使用すると、ビューがコントローラーを経由するため、その際に必要なモデルが取得されます。@RenderPage は、応答にビューを含めるだけです。違いについては、この SO エントリを読むことをお勧めします。

Html.Partial vs Html.RenderPartial & Html.Action vs Html.RenderAction

あなたが(おそらく)最終的にはこのようなものになるでしょう...

<div class="span2 offset1">
    <div class="span12">
        @Html.Action("PlayerDisplayStats")
    </div>
    <div class="span2">
        @Html.Action("GameNavigator")
    </div>
</div>
<div class="span8">
    @Html.Action("MainWindow")
</div>

PartialViewも返すようにコントローラーを変更する必要があります...

public ActionResult PlayerDisplayStats()
{
    var user = _instance.Users.GetUserSkills( WebSecurity.CurrentUserName);
    var userModel = new UserModel(user);
    return PartialView(userModel);
}

後で jQuery を使用して、個々の部分ビューを取得し、更新されたビューをページに挿入できます。

于 2013-09-14T00:15:24.197 に答える