Передача списка типа String с RedirectToAction в ASP.NET-MVC - PullRequest
0 голосов
/ 07 января 2019

Этот код используется для передачи List<String> методом RedirectToAction:

public List<String> ListOfBrandNames(string id)
    {
        var result = db.Items.Where(x => x.Category.Name.Equals(id)).Select(x => x.BrandID).ToList();
        var ListOfBrands = db.Brands.Where(t => result.Contains(t.BrandID)).ToList();
        List<String> BrandNames = ListOfBrands.Select(f => f.Name.ToString()).ToList();
        return RedirectToAction("BrandsOfACategory", new { brands = BrandNames });
    }

RedirectToAction метод выдает эту ошибку:

Невозможно неявно преобразовать тип 'System.Web.Mvc.RedirectToRootResult' в 'System.Collection.Generic.List'

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Попробуйте с приведенным ниже кодом,

public List<String> ListOfBrandNames(string id)
{
    var result = db.Items.Where(x => x.Category.Name.Equals(id)).Select(x => x.BrandID).ToList();
    var ListOfBrands = db.Brands.Where(t => result.Contains(t.BrandID)).ToList();
    List<String> BrandNames = ListOfBrands.Select(f => f.Name.ToString()).ToList();
    TempData["Brands"]=BrandNames;
    return RedirectToAction("BrandsOfACategory");
}

После этого вы можете извлекать данные из TempData в список строк в методе "BrandsOfACategory".

0 голосов
/ 07 января 2019

Вы используете неверный тип возврата в методе действия, поскольку RedirectToAction требует тип возврата ActionResult вместо List<string>, поскольку RedirectToRouteResult унаследовано от ActionResult.

Обновление:

Вам необходимо сериализовать список в строку JSON, чтобы передать его плавно (с библиотекой Newtonsoft.Json), поэтому метод целевого действия должен использовать параметр string. Вот правильная настройка для отправки списка брендов другому методу действия:

public ActionResult ListOfBrandNames(string id)
{
    var result = db.Items.Where(x => x.Category.Name.Equals(id)).Select(x => x.BrandID).ToList();
    var ListOfBrands = db.Brands.Where(t => result.Contains(t.BrandID)).ToList();
    return RedirectToAction("BrandsOfACategory", new { brands = JsonConvert.SerializeObject(ListOfBrands) });
}

И действие целевого контроллера должно выглядеть так:

[HttpGet]
public ActionResult BrandsOfACategory(string brands)
{
    var listOfBrands = JsonConvert.DeserializeObject<List<Brand>>(brands);

    List<string> BrandNames = listOfBrands.Select(f => f.Name.ToString()).ToList();

    // do something and return view
}

Справка:

Как передать список в Redirecttoaction

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...