Проблема обновления ASP.NET MVC Beta Ajax - PullRequest
4 голосов
/ 26 октября 2008

Я ждал когда-нибудь, чтобы довести мой проект Asp.net Preview 4 до полной отмены, полностью пропустив Preview 5 только потому, что знал, что у меня будут некоторые проблемы.

Во всяком случае, вот вопрос и дилемма.

У меня есть несколько областей на сайте, где у меня есть панель типов обновлений ajax, которая отображает содержимое из представления, используя эту технику, найденную здесь. Панели AJAX с ASP.NET MVC

Это отлично работало в предпросмотре 4, но теперь в бета-версии я продолжаю получать это ..

Sys.ArgumentNullException: Value cannot be null Parameter name eventObject

Это сводило меня с ума ...

Мой код выглядит так

<% using (this.Ajax.BeginForm("ReportOne", "Reports", null, new AjaxOptions { UpdateTargetId = "panel1" }, new { id = "panelOneForm" })) { }  %>
<div class="panel" id="panel1"><img src="/Content/ajax-loader.gif" /></div>
<script type="text/javascript">
  $get("panelOneForm").onsubmit();
 </script>

так что в основном он заставляет отправлять данные в форму, которая обновляет panel1 содержимым представления ReportOne.

Что мне не хватает? Почему я получаю эту ошибку? Почему они пошли и изменили вещи? Я люблю MVC, но это сводит меня с ума.

Ответы [ 3 ]

1 голос
/ 03 ноября 2008

К сожалению, просто вызов submit () не вызовет событие onsubmit, поэтому скрипт Ajax MVC не будет запущен. Когда браузер вызывает для вас onsubmit () (потому что пользователь нажал кнопку отправки), он фактически предоставляет параметр с именем event (который вы можете увидеть, если посмотрите на выведенный HTML-код помощником Ajax).

Итак, когда вы вызываете onsubmit () вручную, вам нужно предоставить этот параметр (потому что это требуется для кода Ajax MVC). Итак, вы можете создать «фиктивный» параметр события и передать его onsubmit:

<% using (this.Ajax.BeginForm("ReportOne", "Reports", null, new AjaxOptions { UpdateTargetId = "panel1" }, new { id = "panelOneForm" })) { }  %>
<div class="panel" id="panel1"><img src="/Content/ajax-loader.gif" /></div>
<script type="text/javascript">
  $get("panelOneForm").onsubmit({ preventDefault: function() {} });
</script>

Важной частью является раздел {protectDefault: function () {}} , в котором создается объект JSON, у которого есть метод с именем "protectDefault", который ничего не делает. Это единственное, что скрипт MVC Ajax делает с объектом события, поэтому он должен работать просто отлично.

Возможно, более долгосрочное исправление было бы, если бы код Ajax MVC имел проверку, которая просто игнорировала нулевой параметр события ( wink @Eilon: P)

0 голосов
/ 09 декабря 2008

Наличие некоторых раздражающих проблем, связанных с этой проблемой. Надеюсь, что кто-то здесь может помочь мне.


var event = new Object();
function refreshInformation(){
document.forms['MyForm'].onsubmit({preventDefault: function(){} });
}

Это мой текущий код, он отлично работает для обновления формы. Проблема в том, что "var event" нарушает все остальные события javascript, если у меня есть, например, это:


<img src="myimg.gif" onmouseover="showmousepos(event)" />

это не событие мыши, которое отправлено в функцию, а мое "var event", которое я должен объявить, чтобы заставить onsubmit работать должным образом.

При использовании только

onsubmit({preventDefault: function(){} }
без "var event" я получаю
Sys.ArgumentNullException: Value cannot be null Parameter name eventObject

Я также пытался использовать

submit()
, что делает полную обратную передачу и полностью игнорирует материал ajaxform ... по крайней мере, в моем решении.

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

0 голосов
/ 27 октября 2008

Я считаю, что вызов someFormElement.onsubmit () просто вызывает обработчики событий, зарегистрированные для этого события. Чтобы правильно отправить форму, вы должны вызвать someFormElement.submit () (без префикса «on»).

Я не думаю, что мы изменили что-либо в поведении помощников AJAX между ASP.NET MVC Preview 4 и ASP.NET MVC Beta.

Спасибо, Eilon

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...