对多个视图使用单个 post 操作方法

Use single post action method for multiple views

我有一个 sms 短信应用程序,它有不同的模板供用户发送短信,我使用不同的视图来表示不同的模板,但是我想使用一种操作方法来发送短信,我可能是不同的模板,但在一天结束时,用户将发送一条短信,该短信有两个参数,消息本身和短信要发送到的手机号码,

这是我现在的 3 个模板

   [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");
    }

我的问题是,有没有办法对所有这些视图使用一种方法,我不想有多个 post 方法,除了我想要 return 然后是当前视图(当前模板)。

是的,你可以。

您需要以某种方式跟踪发送短信后应将用户重定向到哪个操作。

一种方法是您可以将标志传递回视图,post它作为隐藏字段来确定应重定向到哪个操作:

[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();
}

并且在 View 中,您可以有一个隐藏字段,它将 post 用于操作:

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

并在操作中添加一个新参数:

[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);
}