3

好的,一切都在“功能上”与我试图完成的工作一起工作,我再次确信这是愚蠢的,但我无法弄清楚如何做这件事。

我有一个实体的编辑表单,比如说一辆车。这辆“汽车”可以有 0 - 许多乘客。所以在我的编辑表单上,我有汽车的所有字段,然后是显示每位乘客(部分)的列表视图。我还有一个“添加新乘客”按钮,它将呈现一个新的局部视图,允许您输入乘客。这有一个取消链接和一个添加按钮来提交一个 Ajax 表单。添加乘客时,乘客会自动添加到列表中,但我需要输入乘客表单才能离开。我曾尝试使用 onSuccess 和 onComplete 函数来隐藏表单所在的 div,但两者都只呈现部分视图 HTML 元素(白屏、文本),而不是整个页面上下文中的部分视图。

来源: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) 添加乘客视图。下面的取消链接是一个不返回任何内容的操作,因此会删除 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 %>
4

2 回答 2

2

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

  1. javascript中的函数hideForm()应该是函数hideForm(),没有大写。我想太习惯于编写控制器功能了。
  2. 我在 OnSuccess 属性中使用了“hideForm()”,而不是“hideForm”-doh。
  3. 您可能不想隐藏 div,因为当您再次单击添加新乘客链接时,不会显示 div。更改了 hideForm 函数以将 div 的 innerHTML 属性设置为 ''。

再次感谢 darin 的帮助,我试图从中获得更多收益。

于 2010-03-28T15:11:38.890 回答
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。

于 2010-03-28T07:03:44.950 回答