Получить значение словаря <string, string> из скрытого поля для метода post в asp.net mvc - PullRequest
0 голосов
/ 05 июля 2019

Я создаю веб-приложение, в котором мне нужно получить значение моего public Dictionary<string, string> KeyValuePairs { get; set; } в пост-методе

вот как выглядит мой код,

Моя модель -> public Dictionary<string, string> KeyValuePairs { get; set; }

указанное выше свойство включено в мою модель

@{
    var index = 0;
    foreach (var item in Model.KeyValuePairs)
    {
        <input type="hidden" value="@item.Key" name="@Model.KeyValuePairs.ElementAt(index).Key" />
        <input type="hidden" value="@item.Value" name="@Model.KeyValuePairs.ElementAt(index).Value" id="@index" />
        index++;
    }
}

Я храню все значения ключа Dictionary<string, string>, но все еще отображается как пустой в моем событии поста контроллера,

Я тоже пробовал, как показано ниже

@foreach (KeyValuePair<string, string> kvp in Model.KeyValuePairs)
{
    <input type="hidden" name="KeyValuePairs[@index].key" value="@kvp.Key" />
    <input type="hidden" name="KeyValuePairs[@index].Value" value="@kvp.Value" />
    index++;
}

Что мне нужно сделать, чтобы получить словарь в Post

1 Ответ

1 голос
/ 06 июля 2019

На самом деле name="@Model.KeyValuePairs.ElementAt(index).Key" извлекает значение.Это должно быть name="Model.KeyValuePairs[@index].Key", тогда он будет привязывать данные к модели.

Проверьте мой код ниже, чтобы понять более четко.

Модель

public class KeyValuePairs {
     public Dictionary<string, string> DictList { get; set; }
}

Контроллер

[HttpPost]
public ActionResult PassDictionary(KeyValuePairs model)
{
    return RedirectToAction("PassDictionary");
}

Вид

@model Project.Web.Models.KeyValuePairs

@using (Html.BeginForm("PassDictionary", "ControllerName", FormMethod.Post, new { })) {

    // I have changed foreach to forloop so no need to declare index 
    for (int i = 0; i < Model.DictList.Count; i++) {

    <input type="hidden" value="@Model.DictList.ElementAt(i).Key" name="Model.DictList[@i].Key" />
    <input type="hidden" value="@Model.DictList.ElementAt(i).Value" name="Model.DictList[@i].Value" />

   }
   <button type="submit" value="Submit">Submit</button>
}
...