Используйте метод одного действия для нескольких просмотров

У меня есть приложение sms sms, в котором есть разные шаблоны, которые пользователи могут использовать для отправки своих SMS-сообщений, я использовал другое представление для представления разных шаблонов, однако я хочу использовать один метод действия для отправки 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");
    }

Мой вопрос в том, есть ли способ использовать один метод для всех этих представлений, я не хочу иметь несколько методов публикации, которые будут иметь почти одинаковый код, кроме redirectToAction, для которого я хочу вернуть текущее представление (текущий шаблон).


person Ronny Mahlangu    schedule 29.03.2017    source источник
comment
Почему бы вам просто не отправить данные через Ajax и уведомить об успешной передаче на стороне клиента? Вы можете использовать одно действие публикации во многих местах, и это также улучшит взаимодействие с пользователем.   -  person Rob    schedule 29.03.2017


Ответы (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);
}
person Ehsan Sajjad    schedule 29.03.2017