2010-04-08 24 views
15

estoy teniendo algunas dificultades con Ajax.BeginFormasp.net mvc Ajax.BeginForm

tengo algo como esto en una vista

<% using (Ajax.BeginForm("ActionName", null , null, new { id = "FormName" })) 
    {%> 
     <input type="hidden" value = '<%= Html.Encode(Model.id) %>' name="id"/> 
     <textarea id="message" name=message rows="4" style="width: 90%"> 
     </textarea> 
    <% }%} 

Y el método de acción es algo como esto

[AcceptVerbs(HttpVerbs.Post)] 
    [Authorize] 
    public ActionResult ActionName(int id, string message) 
    { 
    .... 
    } 

Estoy tratando de pasar el "id" y el "mensaje" al método de acción. Estoy pasando 'null' por routeValues ​​pero no sé qué pasar. Idealmente, estaba tratando de encontrar una sobrecarga que no requiriera valores de ruta, pero tomé actionName y htmlattributes (para el nombre del formulario) pero no pude encontrar uno. No deseo agregar 'mensaje' al modelo de vista y sí necesito el Nombre de formulario allí para operaciones de jquery. ¿Cuál es la mejor manera de evitar este problema?

Ah, se me olvidó mencionar, esta es la forma en que publico la forma

$.post($("#FormName").attr('action'), $("#FormName").serialize(), 
           function(result) { 
            $("#correspondingDiv").html(result); 
           } 
          ); 

Respuesta

29

Uso esta sobrecarga: http://msdn.microsoft.com/en-us/library/dd470605.aspx

Ajax.BeginForm(
    string "ActionName", 
    string "ControllerName", 
    new routevalues {id="IDValue",message="MyMessage"}, 
    new AjaxOptions {OnBegin=[someFunction], OnFailure=[failureFunction] }, 
    new { id = "FormName" } 
) 
+0

Cuando pruebo esta solución, se llama al método de acción del controlador pero aún tiene los valores de ruta iniciales definidos en BeginForm y no los que se rellenaron en el formulario. Alguna idea ? –

+1

No es posible utilizar el Ajax.BeginForm para rellenar los valores de su formulario, porque se llama al auxiliar BeginForm cuando se procesa la página. Puede obtener los valores de los campos de formulario utilizando Request.Form. –

0

Probar:

<% using (Ajax.BeginForm("ActionName", null)) 
    {%> 
     <input type="hidden" value = '<%= Html.Encode(Model.id) %>' name="id"/> 
     <textarea id="message" name=message rows="4" style="width: 90%"> 
     </textarea> 
    <% }%} 

creo que usted tiene más de complicar el asunto, identificación y mensaje llegará rellenado en la devolución de los campos en el formulario para que no tenga que especificarlos en la declaración del formulario. También es posible que desee probar Html.BeginForm() en su lugar, a menos que realmente desee una respuesta Ajax.

+1

sí necesito la respuesta Ajax y también me dijo que tengo que mencionar el FormName en Ajax.BeginForm como tengo varias formas en la página. –

Cuestiones relacionadas