Вопрос

Хорошо, все "функционально" работает с тем, что я пытаюсь выполнить, и еще раз, я уверен, что это что-то глупое, но я не могу понять, как это сделать.

У меня есть форма редактирования для объекта, скажем, автомобиля.В этом "вагоне" может быть 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) Добавить представление пользователя.Ссылка на отмену ниже - это действие, которое ничего не возвращает, таким образом удаляя информацию в 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 %>
Это было полезно?

Решение

Ладно, разобрался с этим, полагаю, прошлой ночью было уже слишком поздно.Итак, вот ответ, на самом деле оказалось, что несколько небольших проблем сливаются в одну.

  1. Функция hideForm() в javascript должна быть функцией hideForm(), без заглавных букв.Я полагаю, слишком привык к написанию функций контроллера.
  2. Я использовал "hideForm()" в атрибуте onSuccess, а не "hideForm" - doh.
  3. Вероятно, вы не хотите скрывать div, так как при повторном нажатии на ссылку добавить нового пассажира div не будет отображаться.Изменена функция hideForm, чтобы установить для свойства innerHTML div значение ".

Еще раз спасибо, Дарин, за твою помощь, я пытался извлечь из этого больше пользы, чем оказалось на самом деле.

Другие советы

Убедитесь, что вы ссылались на оба MicrosoftAjax.js и MicrosoftMvcAjax.js скрипты на вашей странице.Причиной получения содержимого частичного просмотра (белый экран, текст) может быть ошибка скрипта, которая мешает правильному выполнению ajax.Посмотрите с Поджигатель если во время выполнения возникнут какие-то ошибки.

Что касается скрытия формы, вы могли бы использовать OnSuccess обратный вызов:

<% Using Ajax.BeginForm("AddPassengerToCar", 
    New With { .id = ViewData("carID")}, 
    New AjaxOptions With {
        .UpdateTargetId = "passengerList", 
        .InsertionMode = InsertionMode.Replace,
        .OnSuccess = "hideForm"
}) %>

В hideForm функция javascript будет выполнена, если вызов AJAX завершится успешно, и скроет нужный div.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top