对多个视图使用单个 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);
}
我有一个 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);
}