RedirectToAction не передает параметры MVC

#c# #asp.net-mvc #asp.net-mvc-5

#c# #asp.net-mvc #asp.net-mvc-5

Вопрос:

У меня есть действие, которое принимает список элементов модели и удаляет их, мой вопрос в том, почему параметры не передаются

 public ActionResult DeleteMultiple(IEnumerable<QAModel> model)
    {
        _qaService.DeleteMultiple(model);
        long subscriptionId = model.First().SubscriptionId; //value is available here 
        long languageId = model.First().LanguageId;         //value is available here
        return RedirectToAction("Index", new { SubscriptionId =subscriptionId, LanguageId =languageId,Message="Data deleted successfully ."});

    }
  

//перенаправление происходит, но значение становится нулевым внутри индексного метода.

    public ActionResult Index(int? SubscriptionId,int? LanguageId,string Message)
    {



    }
  

что я делаю не так, может кто-нибудь, пожалуйста, помочь мне в этом вопросе.

Комментарии:

1. Перенаправление на индексацию только с DeleteMultiple ? вы уверены , что не перенаправляетесь на Index откуда — то еще?

2. Тип параметра — System.Int32 в методе Index(), но вы передаете System.Int64?

3. @DimitarDimitrov , нет, существует более одного метода, который перенаправляет на индекс действия

4. @StephenMuecke я тоже пробовал с System.Int32, но пока не получаю значения внутри индекса

5. Когда вы выполняете отладку и ваша точка останова достигнута, вы уверены, что она была достигнута с помощью DeleteMultiple или каким-либо другим методом?

Ответ №1:

RedirectToAction возвращает браузеру значение 302, которое вызывает другой запрос GET от браузера, поэтому ваши данные не сохраняются.

Если вы хотите вызвать другой метод, просто вызовите этот метод и избегайте обратного перехода к браузеру.

 return Index(...)
  

Комментарии:

1. спасибо, но я тоже пробовал это, но когда я делаю return Index(…), метод Index вызывается два раза, сначала с параметрами, а во второй раз без параметров

Ответ №2:

Попробуйте использовать словарь значений маршрута RouteValueDictionary в методе RedirectToAction()

C # КОД

 public ActionResult DeleteMultiple(IEnumerable<QAModel> model)
    {
        _qaService.DeleteMultiple(model);
        long subscriptionId = model.First().SubscriptionId; //value is available here 
        long languageId = model.First().LanguageId;         //value is available here
        return RedirectToAction("Index",new RouteValueDictionary {{"SubscriptionId",subscriptionId},{"LanguageId",languageId},{"Message","Data deleted successfully ."}, } );

    }
  

Надеюсь, это может вам помочь, хорошего дня.