具有部分视图和持久路由数据问题的MVC3 Ajax.BeginForm

时间:2012-05-04 02:39:39

标签: asp.net-mvc-3 jquery asp.net-mvc-routing ajax.beginform

我有一个主视图,此视图的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 :(得分:0)

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

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

new { area = "Tools" , id = Model.Id }
相关问题