Member 11970999 Ответов: 5

Как передать список в качестве параметра в url.action?


может ли кто-нибудь помочь мне, как передать список целочисленных значений из представления в контроллер mvc с помощью url.action ??

5 Ответов

Рейтинг:
1

gunjalgajjar

Вы можете проверить ссылку ниже
http://stackoverflow.com/questions/21785424/how-can-i-use-url-action-with-list-parameters[^]


Member 11970999

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

gunjalgajjar

@{ var categories = new List<int>() { 6, 7 };

var parameters = new RouteValueDictionary();

для (int i = 0; i < категорий.Граф; ++i)
{
параметры.Добавить("категория[" + я + "]", категории[я]);
}
}
на < а href="@url-адрес.Действий(" тест","домой",="" параметров)"=""&ГТ; нажать

Передать категорию как список строк

public ActionResult Test(List<string> category)
{
возвращение смотреть();
}

Рейтинг:
1

Siddarth Modi

Вместо этого введите приведение к “объекту” или “объекту[]” или с помощью RouteValueDictionary. Простой способ добиться того же-использовать “Newtonsoft.Json”

При использовании .Net Core 3.0 или более поздней версии;
По умолчанию используется встроенный System.Text.Реализация парсера Json.

@using System.Text.Json;

…….

@Url.Action("ActionName", "ControllerName", new {object = JsonConvert.SerializeObject(‘@ModalObject’)  }))

Если вы застряли с помощью .Net Core 2.2 или более ранней версии;
По умолчанию используется Newtonsoft JSON.Net-это ваш первый выбор JSON-парсера.
@using Newtonsoft.Json;

…..

@Url.Action("ActionName", "ControllerName", new {object = JsonConvert.SerializeObject(‘@ModalObject’)  }))

возможно, вам придется сначала установить пакет.
PM> Install-Package Newtonsoft.Json

Затем,
public ActionResult ActionName(string modalObjectJSON)
{
	Modal modalObj = new Modal();

	modalObj = JsonConvert.DeserializeObject<Modal>(modalObjectJSON);
	
}


Рейтинг:
0

F-ES Sitecore

public ActionResult Index(string[] data)
{
    return View();
}

@{
    var qs = HttpUtility.ParseQueryString("");
    new List<string>{"one", "two", "three"}.ForEach(s => qs.Add("data", s));
}
<a href="@Url.Action("Index", "Home")?@qs">click</a>


Обновление:

@{
    ViewBag.name = "xyz";
    ViewBag.data = new List<string>{"one", "two", "three"};

    var q = HttpUtility.ParseQueryString("");
    q.Add("name", ViewBag.name);

    foreach (var item in ViewBag.data)
    {
        q.Add("data", item.ToString());
    }

}
<a href="@Url.Action("Index", "Home")?@q">click</a>


Member 11970999

Привет Ф-Эс компания,
@{
var a = новый список<int>();

по каждому элементу (ВАР продукт в ViewBag.сведения)
{
a.добавить(пункт);
}

}

@HTML-код.Сырье(@URL-Адрес.Действий("индекс", "дом", новый { ИД= а имени= ViewBag.название}))

я передаю такой список контроллеру mvc спасибо за решение, но оно не работает для меня.

F-ES Sitecore

Это не сработает, я обновил свой ответ альтернативным решением.

Member 11970999

это не работает

F-ES Sitecore

Это работает для меня, поэтому, если вы изменили или исправили код, который я опубликовал, проблема заключается в том, как вы его изменили.

Member 11970999

я делаю то же самое, что и в вашем решении, я ничего не изменил в этом. в контроллере iam получаю строку[] data null

F-ES Sitecore

Когда вы просматриваете источник страницы, как выглядит href?

Member 11970999

"/Home/Index?name=&data=57"

F-ES Sitecore

Вот как это должно выглядеть и работать *пожимание плечами* принимает ли ваше действие get для индекса "string[] data" в качестве параметра? (если вам нужны ints, то это действительно должны быть данные int [], но сначала проще заставить вещи работать со строками).

Member 11970999

мой индекс принимает данные list<int> В качестве параметров

F-ES Sitecore

Это должен быть массив в соответствии с моим кодом, либо string [], либо int[]

Member 11970999

теперь он работает, но берет только первое значение из списка

Member 11970999

я изменил list<int> на int [], но он принимает только одно значение

F-ES Sitecore

Href должен выглядеть так

/Home/Index?data=1&data=2&data=3

Member 11970999

"/Home/Index?data=1&data=2&data=3&name=" это мой href
public ActionResult Index(int[] data,string name)
{
возвращение смотреть();
}
это мой контроллер выглядит так

sergiopenta09

Превосходно!!

Рейтинг:
0

Wessel Beulink

Вы можете использовать

@Url.Action("Index", "home", new { data1 = 0, data2 = 0 })


public ActionResult Index(int data1, int data2)
{
    return View();
}


или

@Url.Action("Index", "home", new { data = yourintlist })


public ActionResult Index(int[] data)
{
    return View();
}


Member 11970999

привет,
представьте, что iam отправляет вот так @Url.Action("Index", "home", new { data = yourintlist })
только вот список не был передан контролеру

Wessel Beulink

Обычно вы помещаете эти списки в модель и передаете ее в свое представление, а затем снова передаете модель контроллеру для внесения изменений. Нет никакого способа создать список внутри вашего контроллера?

Вы используете viebag.данные для хранения данных. Вы можете лучше использовать ViewModel со списком внутри.

Что-то вроде: public List<> a { get; set; }
Вы можете вызвать эту модель и заполнить ее клиентской стороной с помощью: @Model.a.add();


Рейтинг:
0

Krunal Rohit

Вам нужно использовать & для каждого пункта списка.
Что-то вроде,
ids=1&ids=2&ids=3

string param = string.empty;
foreach(var item in list)
{
    param += "ids=" + item + "&";
}
param = param.Remove(param.Length - 1); // remove the last appended &
@Url.Action("Action", "Controller", new { data = param });


-КРОНА