我有一个短信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然后返回当前视图(当前模板)
答案 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);
}