2009-08-03 3 views
3

Je suis en train de concevoir un site et j'essaie d'être compatible avec javascript activé ou désactivé.Comment arrêter un JavaScript MVC RedirectToRouteResult?

J'ai une action de contrôleur nommé comme suit ...

public RedirectToRouteResult AddWorkAssignment(int id) 
{ 
    // delegate the work to add the work assignment... 

    return RedirectToAction("Index", "Assignment"); 
} 

et mon jQuery je fais un post

$('#someButton').click(function() { 
    var id = $('#whereTheIDIs').val(); 
    $.post('/Assignment/AddWorkAssignment/' + id); 
    return false; 
}); 

mais le RedirectToAction sur le contrôleur fera juste que .... Comment puis-je arrêter la redirection, ou comment structurer le contrôleur et la page pour gérer cela, parce que je veux que la redirection se produise si javascript est désactivé.

Répondre

3

Changer votre contrôleur à quelque chose comme ceci:

public ActionResult AddWorkAssignment(int id) 
{ 
    // do work to add the work assignment.... 

    if (Request.IsAjaxRequest()) 
     return Json(true); 

    return RedirectToAction("Index", "Assignment"); 
} 

Vous pouvez créer votre propre filtre attribuer trop ... un peu comme l'attribut AcceptVerbs.

HTHS
Charles

EDIT: AjaxRequest ActionMethodSelectorAttribute attribut

Kickstart de here

public class AjaxRequest : ActionMethodSelectorAttribute 
{ 
    public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo) 
    { 
     if (controllerContext == null) 
      throw new ArgumentNullException("controllerContext"); 

     return controllerContext.HttpContext.Request.IsAjaxRequest(); 
    } 
} 

Ensuite, votre contrôleur:

public RedirectToRouteResult AddWorkAssignment(int id) 
{ 
    // do work to add the work assignment.... 

    return RedirectToAction("Index", "Assignment"); 
} 

[AjaxRequest] 
public JsonResult AddWorkAssignment(int id) 
{ 
    // do work to add the work assignment.... 

    return Json(true); 
} 
Questions connexes