Soy bastante nuevo en todo esto. Estoy usando ASP.NET MVC C# LINQ to SQL.MVC jQuery enviar formulario (sin actualización de página) desde la función de JavaScript
Tengo una página de edición que carga los autores y todos sus libros. Los libros se cargan a través de una llamada Ajax.
<script type="text/javascript">
$(document).ready(function() {
LoadBooks();
});
function LoadBooks() {
$(".Books").hide();
$(".Books").load("/Books/Edit/<%= Model.AuthorID %>");
$(".Books").show('slow');
}
</script>
Esta pieza funciona bien. Se carga la página con la información del autor, entonces la carga Books (una vista parcial en un div id = "Libros", simplemente con la categoría de libro y libro Título):
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Solution.Controllers.BooksController+BooksViewModel>" %>
<% using (Html.BeginForm(null,null, FormMethod.Post,new { id = "bookform" }))
{%>
<fieldset>
<legend>Books</legend>
<%int i = 0;
foreach (var book in Model.Books)
{%>
<%= book.BookID%>
<%= Html.Hidden("book[" + i + "].BookID", book.BookID) %>
<%= Html.DropDownList("book[" + i + "].CatID", new SelectList(Model.Categories, "CatID", "CatTitle", book.CatID))%>
<%= Html.ValidationMessage("CatID", "*")%>
<%= Html.TextBox("book[" + i + "].BookTitle", book.BookTitle)%>
<%= Html.ValidationMessage("BookTitle", "*")%>
<br />
<%i++;
} %>
</fieldset>
<% } %>
Ahora, en la vista de página principal quiero tener un enlace. Cuando se hace clic en el enlace, quiero hacer algunas cosas a través de JavaScript/jQuery/Ajax/lo que sea. Lo primero que quiero que suceda es enviar el formulario de Libros (id = booksform) desde la vista parcial, luego continuar a la siguiente función jQuery. Entonces, hago clic en un enlace que llama a una función de JavaScript. Esta función debe llamar/hacer/ejecutar el envío del formulario de Libros.
Creo que lo he intentado todo, pero no puedo enviar el formulario de mi libro para enviarlo y procesarlo sin que se haya enviado o actualizado la página completa. (Tenga en cuenta que, cuando se realiza la presentación completa, las acciones que esperaría en el controlador se procesan correctamente). Quiero que el proceso/acción del controlador devuelva nada más que algún tipo de indicación de éxito/falla. (Entonces puedo llamar "LoadBooks();".? De nuevo para actualizar la DIV en la página
Cualquier idea
¿Qué sucede si hacen clic en un enlace (no en un botón) que está fuera del formulario? Entonces, ¿cómo asigno el formulario a la variable (var $ form)? Gracias. – johnnycakes
Acabo de probar su sugerencia asignando el de a la variable usando var $ form = document.getElementById ('bookform'); No ocurre nada cuando se hace clic en el enlace. – johnnycakes
Actualicé mi respuesta. getElementById devuelve el objeto javascript no el objeto jquery, use $ ("# bookform") en su lugar. –