我有一个主视图,此视图的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?答案 0 :(得分:0)
如果我正确理解你,这个局部视图会自我调用。所以ParentActionViewContext
第一次工作,因为主视图第一次使用此局部视图调用操作。但是,稍后ajax调用会直接返回此部分视图。直接调用局部视图时,没有父视图操作,因此ParentActionViewContext
上的空引用。
我建议在部分视图的模型中包含id,而不是处理路径数据。
new { area = "Tools" , id = Model.Id }