2012-05-04 13 views
0

私がメインビューを持っているし、このビューのURLは、アクション/コントローラ/エリアとid値を持っている、のようなもの:私が持っているMVC3 PartialViewとAjax.BeginFormと持続routedata問題

http://localhost:56513/Incident/IncidentHome/Index/8c02a647-a883-4d69-91be-7ac5f7b28ab7

このメインビューのpartialviewは、Ajax経由でコントローラ内のメソッドを呼び出すビューです。この部分ビューでは、親ページのURLのID値を知る必要があります。私はこれを行う方法が 'ParentActionViewContent'を介していることがわかりました。ような何か:

 using (Ajax.BeginForm("UpdatePersonalStatusPanel", "Status", new { area = "Tools" , id = ViewContext.ParentActionViewContext.RouteData.Values["id"].ToString() }, new AjaxOptions { UpdateTargetId = "divPersStatus" })) 
     { 
      <p style="text-align: center;"> 
       <span class="editor-label">@Html.LabelFor(m => m.StatusText)</span> <span class="editor-field">@Html.EditorFor(m => m.StatusText)</span> 
       <input type="submit" value="Change Current Status" /> 
      </p> 
     } 

は今、これは、コントローラのメソッドを呼び出すための素晴らしい作品。 IDは正しく渡され、コントローラーはそれをルーテータで見ることができます。 idを使用してデータベース呼び出しを実行し、partialviewを再度返します。問題は返品にあります。 ViewContext.ParentActionViewContext.RouteData.Values ["id"]のToString()ビットがajax.beginformにあり、targetidが更新されません。

明らかに私は間違ったことをしているに違いありません。他の誰かがAjaxを通して親ビューのルーテータを見る良い方法がありますか?

答えて

0

私はあなたを正しく理解している場合、この部分的なビューはそれ自身を呼び出します。したがって、この部分ビューを使用してメインビューが最初にアクションを呼び出すため、初めてParentActionViewContextが機能します。しかし、後でajax呼び出しがこの部分的なビューを直接返します。部分ビューが直接呼び出されると、親ビュー操作は存在しないため、null参照はParentActionViewContextにあります。

ルートデータを扱うのではなく、部分ビューのモデルにIDを含めることをお勧めします。

new { area = "Tools" , id = Model.Id } 
+0

私はそれが行く方法だと思います!私はちょうど私がモデルにIDを含んでいればそれが冗長であると考えました、すでにURLに入っていますが、その方法は問題なく動作しますので、ありがとう! – Phil

関連する問題