2012-04-20 2 views
2

Когда я нажимаю кнопку отправки, я прямо иду к своему действию. Следующие 2 не выполняются:MVC3 - Razor, Ajax.BeginForm - клиентская сторона - OnBegin

  1. На мой взгляд, метод beginForm моей стороны не вызывается. Который я хочу.
  2. Request.IsAjaxRequest является ложным, даже если моя модель имеет вид вход

Пытаясь найти ответ на эту проблему. Тот же код работает в MVC2, поэтому я должен упустить что-то здесь. ссылается

Этих 2 MS расслоения плотных файлов:

<!-- MS AJAX --> 
<script type="text/javascript" src="/Scripts/MicrosoftAjax.js"></script> 
<script type="text/javascript" src="/Scripts/MicrosoftMvcAjax.js"></script> 

Код формы:

@{ 
     using (Ajax.BeginForm(ActionNames.Index, ControllerNames.CustomerSearch, new {Area = ""}, new AjaxOptions 
                             { 
                              HttpMethod = "Post", 
                              OnBegin = "CustomerSearch.beginForm", 
                              OnSuccess = "CustomerSearch.successForm" 
                             }, new {id = "CustomerSearchForm"})) 
     { 

... form items ... 
} 
} 

форма, как он отображает на странице:

<form action="/CustomerSearch" data-ajax="true" data-ajax-begin="CustomerSearch.beginForm" data-ajax-method="Post" data-ajax-success="CustomerSearch.successForm" id="CustomerSearchForm" method="post"> 

... Other Form Items ... 
<input type="image" src="/App_Themes/Main/Images/ResponseAction/Buttons/btn_submit.gif" alt="Submit" id="SubmitButton" /> 
</form> 

А вот мой CustomerSearch. js, на странице оповещения о нагрузке (2) показывает только штраф:

var CustomerSearch = { 
    enums: { 
     buttonId: "SubmitButton", 
     searchResultsContainerId: "CustomerSearchResults" 
    }, 
    beginForm: function() { 
     alert(1); 
     var $button = $("#" + CustomerSearch.enums.buttonId); 
     jMessage("Processing request...", $button, true, false); 
     return true; 
    }, 
    successForm: function (context) { 
     var $button = $("#" + CustomerSearch.enums.buttonId); 
     var $searchResults = $("#" + CustomerSearch.enums.searchResultsContainerId); 
     var data = context.get_data(); 

     jMessageHide(); 
     $searchResults.html(data).fadeIn(500); 
    } 
}; 

alert(2); 

Мой Ненавязчивый JavaScript включен устанавливается истина в web.config:

<add key="ClientValidationEnabled" value="true"/> 
<add key="UnobtrusiveJavaScriptEnabled" value="true"/> 

ответ

2

With MVC3 Ненавязчивый Ajax помощникам:

  • Ajax.ActionLink
  • Ajax.RouteLink
  • Ajax .BeginForm
  • Ajax.BeginRouteForm

использует файл jquery.unobtrusive.ajax.js.

Так что вам нужно включить, что JS файл вместо тех MicrosoftAjax (файлы MicrosoftAjax являются устаревшими в MVC3 и не поставляются с MVC4 бета):

<script type="text/javascript" src="/Scripts/jquery.unobtrusive-ajax.min.js"></script> 
+0

поздно для класса, будет проверять это как скоро, когда я вернусь. –

+0

Спасибо за помощь. Теперь я использую jquery $ .ajax. Также помогли: http://stackoverflow.com/questions/5410055/using-ajax-beginform-with-asp-net-mvc-3-razor –