好吧,一切都在'功能'上与我想要完成的事情一起工作,再一次,我确信这是愚蠢的,但我无法弄清楚如何做到这一点。
我有一个实体的编辑表格,比方说一辆车。这辆“汽车”可以拥有0名乘客。所以在我的编辑表格中,我有汽车的所有字段,然后是列出每个乘客(部分)的列表视图。我还有一个“添加新乘客”按钮,它将呈现一个允许您进入乘客的新局部视图。这有一个取消链接和一个添加按钮来提交Ajax表单。当您添加乘客时,乘客会自动添加到列表中,但我需要输入乘客表格才能离开。我已经尝试使用onSuccess和onComplete函数隐藏表单所在的div,但两者都只渲染部分视图HTML元素(白色屏幕,文本),而不是整个页面上下文中的partialView。
来源: 1)主编辑视图
<script type="text/javascript">
Function hideForm(){
document.getElementById('newPassenger').style.display = 'none';
}
</script>
<h2>Edit</h2>
<%-- The following line works around an ASP.NET compiler warning --%>
<%= ""%>
<%Html.RenderPartial("EditCar", Model)%>
<h2>Passengers for this car</h2>
<%=Ajax.ActionLink("Add New Passenger", "AddPassenger", New With {.ID = Model.carID}, New AjaxOptions With {.UpdateTargetId = "newPassenger", .InsertionMode = InsertionMode.Replace})%>
<div id="newPassenger"></div>
<div id="passengerList">
<%Html.RenderPartial("passengerList", Model.Passengers)%>
</div>
<div>
<%= Html.ActionLink("Back to List", "Index") %>
</div>
2)AddPassenger视图。下面的取消链接是一个不返回任何内容的操作,因此删除了div中的信息。
<% Using Ajax.BeginForm("AddPassengerToCar", New With {.id = ViewData("carID")}, New AjaxOptions With {.OnSuccess = "hideForm()", .UpdateTargetId = "passengerList", .InsertionMode = InsertionMode.Replace})%>
<%=Html.DropDownList("Passengers")%>
<input type="submit" value="Add" />
<%=Ajax.ActionLink("Cancel", "CancelAddControl", _
New AjaxOptions With {.UpdateTargetId = "newPassenger", .InsertionMode = InsertionMode.Replace})%><% end using %>
答案 0 :(得分:2)
好的 - 想通了,我想昨晚已经太晚了。所以,这就是答案,它实际上是一些小问题,最终形成一个。
再次感谢darin的帮助,我试图从中获取更多信息。
答案 1 :(得分:1)
确保您已在网页中引用了MicrosoftAjax.js
和MicrosoftMvcAjax.js
脚本。获取部分视图内容(白屏,文本)的原因可能是脚本错误,这会阻止ajax正确执行。如果在执行过程中出现一些错误,请查看FireBug。
就隐藏表单而言,您可以使用OnSuccess
回调:
<% Using Ajax.BeginForm("AddPassengerToCar",
New With { .id = ViewData("carID")},
New AjaxOptions With {
.UpdateTargetId = "passengerList",
.InsertionMode = InsertionMode.Replace,
.OnSuccess = "hideForm"
}) %>
如果AJAX调用成功,将执行hideForm
javascript函数,并将隐藏所需的div。