首页 文章

具有PartialView和持久性routedata问题的MVC3 Ajax.BeginForm

提问于
浏览
0

我有一个主视图,该视图的URL有一个Action / Controller / Area和id值,如:

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

我在这个主视图中有一个部分视图,一个通过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正确传递,以便控制器可以在routedata中查看它 . 我使用id来执行数据库调用,然后再次返回partialview . 问题在于回归 . 我在ViewContext.ParentActionViewContext.RouteData.Values [“id”]上得到一个'对象引用没有设置为对象的实例' . 在ajax.beginform中的ToString()位,我的targetid没有刷新 .

显然我一定是做错了 . 其他人是否有更好的方法通过Ajax查看父视图的routedata?

1 回答

  • 0

    如果我正确地理解你,那么这个局部视图就会自我调用 . 所以 ParentActionViewContext 第一次工作,因为你的主视图第一次使用这个局部视图调用一个动作 . 但是,稍后ajax调用会直接返回此部分视图 . 直接调用局部视图时,没有父视图操作,因此 ParentActionViewContext 上的空引用 .

    我建议在部分视图的模型中包含id,而不是处理路由数据 .

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

相关问题