.NET MVC Ajax表单 - 你如何隐藏它?

时间:2010-03-28 01:40:04

标签: asp.net-mvc vb.net ajax microsoft-ajax

好吧,一切都在'功能'上与我想要完成的事情一起工作,再一次,我确信这是愚蠢的,但我无法弄清楚如何做到这一点。

我有一个实体的编辑表格,比方说一辆车。这辆“汽车”可以拥有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 %>

2 个答案:

答案 0 :(得分:2)

好的 - 想通了,我想昨晚已经太晚了。所以,这就是答案,它实际上是一些小问题,最终形成一个。

  1. 函数hideForm()在javascript中应该是函数hideForm(),没有大写字母。我以为习惯于编写控制器函数。
  2. 我在OnSuccess属性中使用“hideForm()”,而不是“hideForm” - doh。
  3. 您可能不希望隐藏div,因为当您再次单击添加新乘客链接时,div将不会显示。更改了hideForm函数,将div的innerHTML属性设置为''。
  4. 再次感谢darin的帮助,我试图从中获取更多信息。

答案 1 :(得分:1)

确保您已在网页中引用了MicrosoftAjax.jsMicrosoftMvcAjax.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。