MVC3 Ajax.BeginForm with PartialView 和持久路由数据问题



>我有一个主视图,这个视图的URL有一个操作/控制器/区域和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 已正确传递,以便控制器随后可以在路由数据中看到它。 我使用 id 执行数据库调用,然后再次返回分部视图。 问题出在退货上。 我在ViewContext.ParentActionViewContext.RouteData.Values["id"]上得到一个"对象引用未设置为对象的实例"。ajax.beginform 中的 ToString(( 位,而我的 targetid 没有刷新。

显然,我一定做错了什么。 其他人是否有更好的方法来通过 Ajax 查看父视图的路由数据?

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

与其处理路由数据,我建议在分部视图的模型中包含 id。

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

最新更新