ASP.NET MVC AJAX возвращает новую страницу простым вызовом - PullRequest
2 голосов
/ 15 июля 2009

Я не уверен, что не так со следующей настройкой. У меня есть представление, в котором перечислены несколько записей, и с каждой из них связан выпадающий список, чтобы изменить значение этой записи. У меня все это работало без AJAX, но вам пришлось изменить кучу выпадающих меню, а затем нажать кнопку «Отправить». Я хотел изменить его, чтобы он сразу же сохранял выпадающий список.

Мое упрощенное представление (типа IEnumerable (Of MyTable)):

<script src="../../Scripts/MicrosoftAjax.debug.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcAjax.debug.js" type="text/javascript"></script>

<% For Each item In Model%>
<% Using Ajax.BeginForm("Update", New AjaxOptions With {.UpdateTargetId = "test"})%>
<%=Html.Hidden("id", item.id)%>
<%=item.name%>:
<%=Html.DropDownList("ActionCode", New SelectList(ViewData("actions"), "Value", "Text", item.ActionCode), New With {.onchange = "this.form.submit();"})%>
<span id="test"></span>
<br/>
<% End Using%>
<% Next%>

Контроллер My Update:

<AcceptVerbs(HttpVerbs.Post)> _
Function Update(ByVal id As Integer, ByVal ActionCode As String) As ActionResult
    'Update would happen here
    Return Content(id & ": " & ActionCode)
End Function

Я бы хотел, чтобы выпадающее изменение активировало контроллер обновлений, но, вероятно, ничего не возвращало - просто обновите базу данных и позвольте пользователю двигаться дальше. Однако происходит то, что отображается пустая страница со значением Content (т.е. «123: ABC»). Это правильная комбинация идентификатора / кода, поэтому обновление, похоже, запускается корректно, оно просто хочет стереть HTML.

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

1 Ответ

2 голосов
/ 06 сентября 2009

Возможно, вы вложили теги формы?

Я обнаружил, что в этом сценарии нажатие кнопки отправки фактически вызывает отправку формы во внешней форме, а не во внутренней, как вы ожидаете:

<form id="outer">
  <form id="inner">
     <input type="submit" value="submit" />
  </form>
</form>

Я бы также рекомендовал использовать такой инструмент, как плагин Firebug для Firefox. Это поможет вам увидеть активность и ответ Ajax.

...