2012-03-09 11 views
5

Tengo un método que registra el voto para un comentario. Si no hay errores al emitir el voto, devuelvo un pequeño fragmento de html a través de PartialViewResult para actualizar la página.¿Cómo puedo devolver una cadena vacía (o nulo) para un PartialViewResult?

Si no tiene éxito, no debería pasar nada. Necesito probar esta condición en el lado del cliente.

El método del lado del servidor:

[HttpPost] 
public PartialViewResult RegisterVote(int commentID, VoteType voteType) { 
    if (User.Identity.IsAuthenticated) { 
     var userVote = repository.RegisterVote((Guid)Membership.GetUser().ProviderUserKey, commentID, voteType); 
     if (userVote != null) { 
      return PartialView("VoteButtons", userCommentVote.Comment); 
     } 
    } 

    return null; 
} 

El script del lado del cliente:

$(document).on("click", ".vote img", function() { 
    var image = $(this); 

    var commentID = GetCommentID(image); 
    var voteType = image.data("type"); 

    $.post("/TheSite/RegisterVote", { commentID: commentID, voteType: voteType }, function (html) { 
     image.parent().replaceWith(html); 
    }); 
}); 

Si se registró la votación, el "html" containes variables marcado como se esperaba. Si no tiene éxito (es decir, se devuelve null), la variable "html" es en cambio un objeto "Documento" con un error de análisis.

¿Hay alguna manera de devolver una cadena vacía desde PartialViewResult y luego simplemente probar la longitud? ¿Hay una manera diferente/mejor de hacer esto?

Respuesta

5

cambiar su método de firma de: public PartialViewResult

Para: public ActionResult

A continuación, en lugar de devolver nulo, devolver este:

return Json("");

Esto le permitirá volver una vista parcial si exitoso, si no, simplemente devolverá JSON con una cadena vacía como valor. Su JS actual funcionará como está. Desde MSDN:

La clase ActionResult es la clase base para los resultados de acción.

Los siguientes tipos derivan de ActionResult:

  • ContentResult
  • EmptyResult
  • FileResult
  • HttpUnauthorizedResult
  • JavaScriptResult
  • JsonResult
  • RedirectResult
  • RedirectToRouteResult
  • ViewResultBase

Esto es lo que le permite devolver diferentes tipos derivados en su método.

+0

Funcionó como un amuleto. Gracias – Jason

0

Sería mejor para devolver un JsonResult como,

[HttpPost] 
    public JsonResult RegisterVote(int commentID, VoteType voteType) 
    { 
     JsonResult result = new JsonResult(); 
     object content; 
     if (User.Identity.IsAuthenticated) 
     { 
      var userVote = repository.RegisterVote((Guid)Membership.GetUser().ProviderUserKey, commentID, voteType); 
      if (userVote != null) 
      { 
       content = new 
       { 
        IsSuccess = true, 
        VoteButtons = userCommentVote.Comment 
       }; 
      } 
      else 
      { 
       content = new { IsSuccess = false }; 
      } 
     } 
     result.Data = content; 
     return result; 
    } 

En la llamada Ajax, puede validar si es IsSuccesstrue o false.

Cuestiones relacionadas