我有一个主视图,该视图的 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 被正确传递,以便控制器可以在路由数据中看到它。我使用 id 执行数据库调用,然后再次返回部分视图。问题在于退货。我在 ajax.beginform 的 ViewContext.ParentActionViewContext.RouteData.Values["id"].ToString() 位上得到一个“对象引用未设置为对象的实例”,并且我的 targetid 没有刷新。
显然我一定做错了什么。其他人有更好的方法通过 Ajax 查看父视图的路由数据吗?