对多个视图使用单一帖子操作方法

时间:2017-03-29 08:48:17

标签: asp.net-mvc actionmethod

我有一个短信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方法几乎具有相同的代码,除了我要返回的redirectToAction然后返回当前视图(当前模板)

1 个答案:

答案 0 :(得分:1)

是的,你可以。

在发送短信后,您需要跟踪用户应该重定向的操作。

一种方法是你可以将标志传回视图并将其作为隐藏字段发布,以确定应该将哪个操作重定向到:

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

在视图中,您可以拥有一个隐藏字段,该字段将发布到操作:

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