2010-12-18 11 views
14

Tengo mi forma de la siguiente maneraAsp.Net MVC Ajax.BeginForm no está sometiendo a través de Ajax

<div id="contact-form" class="hidden" title="Online Request Form"> 
    @Using (Ajax.BeginForm("Contact", "Main", 
          Nothing, 
          New AjaxOptions With {.UpdateTargetId = "status", .HttpMethod = "post"}, 
          New With {.id = "contactUs"})) 
     @<div> 
      @Html.LabelFor(Function(m) m.Name)<br /> 
      @Html.TextBoxFor(Function(m) m.Name)<br /> 
      @Html.LabelFor(Function(m) m.Phone)<br /> 
      @Html.TextBoxFor(Function(m) m.Phone)<br /> 
      @Html.LabelFor(Function(m) m.Email)<br /> 
      @Html.TextBoxFor(Function(m) m.Email)<br /> 
      @Html.LabelFor(Function(m) m.Question)<br /> 
      @Html.TextAreaFor(Function(m) m.Question)<br /> 
      @Html.LabelFor(function(m) m.Security)<br /> 
      @Html.TextBoxFor(Function(m) m.Security)<br /> 
      <noscript> 
       <input type="submit" name="submit" value="Ok" /> 
      </noscript> 
      @Html.ValidationSummary("Oops, please correct the errors.")<span id="status">@TempData("status")</span> 
     </div> 
    End Using 
</div> 

Y estoy abrirlo en un jQuery-UI ventana modal

<script> 
    $(function() { 

     // Open the modal dialog from the div.contact-us click event 
     $('#contact-us').click(function() { 
      $('#contact-form').dialog('open'); 
      return false; 
     }); 

     // Manage the modal dialog behavior. 
     $('#contact-form').dialog({ 
      modal: true, 
      autoOpen: false, 
      buttons: { 
       Cancel: function() { 
        $(this).dialog('close'); 
       }, 
       Ok: function() { 
        $('form#contactUs').trigger('submit'); 
       } 
      } 
     }); 
    }); 

</script> 

cuando hago clic en el botón "OK", que es la publicación al controlador adecuado, sin embargo, no es la publicación a través de AJAX

''# fix the StackOverflow code coloring issue. 
    <HttpPost()> 
    Function Contact(ByVal contactForm As Models.ContactForm) As ActionResult 
     ViewData("Testimonials") = Helpers.GetTestimonials 

     If ModelState.IsValid Then 
      ''# Submit the email 
      TempData("status") = "Thank you, we will be in touch" 
     Else 
      ''# Return False 
      TempData("status") = "Oops, please correct the errors." 
     End If 


     If Request.IsAjaxRequest Then 
      Return Content(TempData("status").ToString) 
     Else 
      Return View("Index") 
     End If 
    End Function 

¿Qué estoy haciendo mal? Después de enviar el formulario, mi URL es http://example.com/Main/Contact que me dice que IsAjaxRequest = false

EDITAR

Incluso cuando no uso el botón jquery-ui "ok" y simplemente añadir <input type="submit" name="submit" value="Ok" /> a la forma, la forma mensajes sin Ajax

+4

Mirando hacia adelante al día en que stackoverflow puede sintaxis Razor apropiadamente color. –

Respuesta

44

¿Tiene el guión jquery ajax incluido? Me he dado cuenta de este tipo de comportamiento cuando no me incluyo:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
+29

Santa mierda Soy un retrasado. –

+9

Espero que estos comentarios al pie de los comentarios sean divertidos, y que no todos me llamen retrasado. jaja –

+2

+1 Tenía el mismo problema. Esto lo solucionó. Gracias. –

2

no he trabajado con los ayudantes ASP.NET MVC AJAX en un tiempo, pero creo que Ajax.BeginForm agrega un controlador de línea onsubmit en el marcado generado (HTML).

Si este es el caso, llamando a presentar en esta forma programación (su jQuery que desencadena el evento submit) no va a llamar a la función onsubmit de la forma, que muy probablemente se cancela la normal de presentar la acción y envía el formulario a través de AJAX.

Para obtener más información acerca de por qué ocurre esto, consulte this related answer.

Como alternativa, puede publicar el formulario a través de AJAX utilizando

que he encontrado ninguno de estos métodos menos de una molestia que el uso de ayudantes de AJAX de Microsoft.

+0

Eso es lo que yo también pensé, pero [esta pregunta SO] (http://stackoverflow.com/questions/1305601/how-to-post-asp-net-mvc-ajax-form-using-javascript-rather-than- botón de enviar) dice que use el método 'trigger' –

+0

@rockinthesixstring: No estoy convencido. Los documentos (http://api.jquery.com/submit/) indican que el método '.submit()' es un atajo para '.trigger ('submit')' –

+0

Edité mi pregunta. –

Cuestiones relacionadas