2011-06-15 32 views
9

Ya he leído this post, pero no estoy seguro de saber cómo hacerlo para tomar datos del usuario. Aquí está el jquery ajax que estoy usando. Sé (o al menos pienso) que esto no puede ser parcial. Pero funciona hasta que el render falla. Pensé que podría ser útil tener.Renderizar vista parcial utilizando Jquery Ajax con datos variables

$.ajax(
    { 
     type: 'POST', 
     contentType: 'application/json; charset=utf-8', 
     data: "{'test':" + "'" + dateText + "'}", 
     dataType: 'json', 
     url: 'Site/Grab/', 
     success: function (result) { 
     alert('Success'); 
     }, 

     error: function (error) { 
      alert('Fail'); 
     } 
     }); 

Aquí está mi controlador de

[HttpPost] 
    public ActionResult Grab(string test) 
    { 
     DateTime lineDate= Convert.ToDateTime(test); 
     List<Info> myInfo= GameCache.Data(lineDate); 
     return PartialView("_PartialView", myInfo); 
    } 
+0

Si funciona hasta que se intenta hacer que el parcial, el problema es más probable en el marcado del punto de vista parcial. Proporcione ese código, así como el error que está recibiendo. – StriplingWarrior

Respuesta

18

bien, un par de cosas para probar:

1) dataType es el resultado esperado de la llamada AJAX. En su caso, su enviando JSON, pero recibiendo HTML. El parámetro content-type especifica la solicitud que tiene (y lo que tiene es correcto). Por lo tanto, el tipo de datos debe ser:

dataType: 'html', 

2) Necesita serializar el JSON. Intenta coger la biblioteca ligera JSON y stringify 'ing:

var test = { test: 'testvalue' }; 
$.ajax { 
    ... 
    data: JSON.stringify(test), 
    ... 
}); 

Mucho más fácil que tratar de coaccionar a una cadena JSON con quoatations. Crea una variable JS regular, luego haz una cadena.

El resto de su código se ve bien.

Si se trata de un problema con el HTML/marcado de la vista parcial en sí, ejecute en modo de depuración y Visual Studio debe detenerse en la línea del marcado que está causando el problema.

Bonus Hint: ASP.NET MVC 3 incluye encuadernación de modelo JSON incorporada. Por lo que puede crear un POCO básica que corresponden con los campos de su objeto JSON, entonces aceptarlo como un objeto inflexible de tipos en el método de acción:

[HttpPost] 
public ActionResult Grab(MyJsonObject obj) 
{ 
    DateTime lineDate= Convert.ToDateTime(obj.test); 
    List<Info> myInfo= GameCache.Data(lineDate); 
    return PartialView("_PartialView", myInfo); 
} 

Debido a que su solo parámetro que envía, que es una exageración - pero si tiene más de 2, entonces vale la pena usar un JSON POCO.

+2

cuando cambié el tipo de datos de datos a html se solucionó el problema. –

3

cambiar el código de controlador para:

public ActionResult Grab(string test) { 
    DateTime lineDate= Convert.ToDateTime(test); 
    List<Info> myInfo= GameCache.Data(lineDate); 

    return Json(new { data = this.RenderPartialViewToString("_PartialView", myInfo) }); 
} 
+0

donde existe el método "RenderPartialViewToString()"? – BlueBird

+0

Aquí http://www.c-sharpcorner.com/blogs/7150/implementing-renderpartviewviewtostring-in-asp-net-mvc-3.aspx o aquí http://craftycodeblog.com/2010/05/15/asp -net-mvc-render-partial-view-to-string / – Marc

Cuestiones relacionadas