2017-03-29 2 views
0

J'ai une application sms sms, qui a différents modèles que les utilisateurs peuvent utiliser pour envoyer leurs SMS, j'ai utilisé une vue différente pour représenter différents modèles, mais je veux utiliser une méthode d'action pour envoyer un SMS, je pourrais être différents modèles mais à la fin de la journée l'utilisateur enverra un sms qui a deux paramètres, message lui-même et numéro de cellulaire auquel ce sms doit être envoyé,Utiliser une seule méthode d'action pour plusieurs vues

Voici mes 3 modèles pour maintenant

[HttpGet] 
    public ActionResult BookingServiceReminder() 
    { 
     return View(); 
    } 

    [HttpGet] 
    public ActionResult ServiceReminder() 
    { 
     return View(); 
    } 

    [HttpGet] 
    public ActionResult DetailedReminder() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult SendSMS(string message, string cellNumber) 
    { 
     if (_dbManager.SendSMS(cellNumber, message, User.Identity.Name)) 
     { 
      TempData["Success"] = "Message was successfully sent"; 
     } 
     else 
     { 
      TempData["Error"] = "An error occured while sending the message"; 
     } 
     return RedirectToAction("BookingServiceReminder"); 
    } 

Ma question est, est-il un moyen d'utiliser une méthode pour toutes les vues, je ne veux pas avoir plusieurs méthodes post WHI ch aura presque le même code sauf le redirectToAction sur lequel je veux retourner puis la vue actuelle (modèle actuel).

+0

Pourquoi ne pas jus t envoyer les données via Ajax et notifier la transmission réussie du côté client? Vous pouvez utiliser une action de publication dans plusieurs endroits et améliorer également l'expérience de l'utilisateur. – Robert

Répondre

1

Oui, vous pouvez.

Vous auriez besoin de garder la trace de l'action à laquelle l'utilisateur devrait être redirigé après l'envoi du SMS.

Une façon pour elle est que vous pouvez passer le drapeau en arrière pour voir et afficher terrain caché pour déterminer ce qui l'action devrait être redirigé vers:

[HttpGet] 
public ActionResult BookingServiceReminder() 
{ 
    ViewBag.RedirectTo = "BookingServiceReminder"; 
    return View(); 
} 

[HttpGet] 
public ActionResult ServiceReminder() 
{ 
    ViewBag.RedirectTo = "ServiceReminder"; 
    return View(); 
} 

[HttpGet] 
public ActionResult DetailedReminder() 
{ 
    ViewBag.RedirectTo = "DetailedReminder"; 
    return View(); 
} 

et vue, vous pouvez avoir un champ caché qui afficheraient à l'action:

<input type="hidden" value="@ViewBag.RedirectTo" name="RedirectTo"> 

et en action ajouter une nouvelle paramter:

[HttpPost] 
public ActionResult SendSMS(string message, string cellNumber,string RedirectTo) 
{ 
    if (_dbManager.SendSMS(cellNumber, message, User.Identity.Name)) 
    { 
     TempData["Success"] = "Message was successfully sent"; 
    } 
    else 
    { 
     TempData["Error"] = "An error occured while sending the message"; 
    } 
    return RedirectToAction(RedirectTo); 
}