Member 14552976 Ответов: 2

Как можно использовать данные одного метода действия в другом методе действия


public ActionResult SenddOTP()
       {
           string numbers = "0123456789";
           Random objrandom = new Random();
           string strrandom = string.Empty;
           for (int i = 0; i < 5; i++)
           {
               int temp = objrandom.Next(0, numbers.Length);
               strrandom += temp;
           }
           ViewBag.otp = strrandom;

           return RedirectToAction("SendEmailtoUser");
           //  return View("SendOTP");
       }

       public JsonResult SendEmailtoUser()
       {

           bool result = false;
           var OTP = ViewBag.otp;
           result = SendEmail("user@gmail.com", "Hello", OTP);
           return Json(result, JsonRequestBehavior.AllowGet);
       }


Что я уже пробовал:

я перепробовал много вещей, но ничего не работает

2 Ответов

Рейтинг:
2

Maciej Los

Если я правильно вас понял вы хотите передать данные через RedirectToAction метод. Если да, то ... ..
Контроллер.Метод RedirectToAction (System.Web.Mvc) | Microsoft Docs[^] имеет несколько перегрузок.

Если вы хотите вернуть результат от другого действия, вы можете использовать что-то вроде этого:

return RedirectToAction( "Main", new RouteValueDictionary( 
    new { controller = controllerName, action = "Main", Id = Id } ) );


Member 14552976

я хочу использовать результат метода SendOTP() в методе SendEmailtoUser()

Maciej Los

Итак, измените код в соответствии с вашими потребностями!

Member 14552976

как.я новичок в MVC

Maciej Los

И чего ты от меня ждешь?

Member 14552976

- поможешь мне?

Maciej Los

Я уже сделал это. Все, что вам нужно сделать, это изменить код в соответствии с вашими потребностями. Примечание: Я не вижу вашего экрана и не могу читать в ваших мыслях. Я понятия не имею, как вы хотите вызвать действие контроллера. Пожалуйста, прочтите это:
c# - перенаправление на действие с помощью JsonResult - переполнение стека[^]
redirecttoaction - как перенаправить действие контроллера из метода JSONResult в ASP.NET MVC? - переполнение стека[^]

Member 14552976

спасибо

Рейтинг:
2

Richard Deeming

RedirectToAction возвращает ответ клиенту, сообщающий ему сделать новый запрос на указанное действие.

То ViewBag содержимое не сохраняется между запросами. Все, что вы добавляете к ViewBag перед возвратом ответ на перенаправление будет недоступен, когда браузер сделает новый запрос.

Здесь есть несколько вариантов:

1) Не используйте RedirectToAction:

public ActionResult SenddOTP()
{
    ...
    ViewBag.otp = strrandom;
    return SendEmailtoUser();
}

private JsonResult SendEmailtoUser()
{
    string OTP = ViewBag.otp;
    bool result = SendEmail("user@gmail.com", "Hello", OTP);
    return Json(result, JsonRequestBehavior.AllowGet);
}
Или:
public ActionResult SenddOTP()
{
    ...
    return SendEmailtoUser(strrandom);
}

private JsonResult SendEmailtoUser(string OTP)
{
    bool result = SendEmail("user@gmail.com", "Hello", OTP);
    return Json(result, JsonRequestBehavior.AllowGet);
}
Браузер сделает один HTTP-запрос, и перенаправление не будет задействовано.

2) Используйте TempData место хранения:
public ActionResult SenddOTP()
{
    ...
    TempData["otp"] = strrandom;
    return RedirectToAction(nameof(SendEmailtoUser));
}

public JsonResult SendEmailtoUser()
{
    string OTP = TempData["otp"] as string;
    bool result = SendEmail("user@gmail.com", "Hello", OTP);
    return Json(result, JsonRequestBehavior.AllowGet);
}
При этом все равно будут использоваться два HTTP-запроса.

NB: В этом случае вам нужно будет подтвердить, что TempData значение существовало, так как пользователь мог перейти непосредственно к SendEmailToUser действие без прохождения через SenddOTP действие.

Особое примечание 2: В слове "отправить" есть только одна буква "Д". :)


Member 14552976

спасибо за ваш ответ.

Maciej Los

Хорошо объяснил!

EhabAhmed

Спасибо