Asp.net mvc 将字典从视图传递到控制器

Asp.net mvc 将字典从视图传递到控制器,asp.net-mvc,razor,Asp.net Mvc,Razor,型号: 视图: FreeText输入字段的传递非常顺利。但是,即使SearchValues字段的下拉列表在页面上正确显示,它在控制器中返回为空计数=0。为什么会这样,我可以将字典传递给控制器吗?无需使用映射器或更改模型属性的绑定方式,最简单的方法是为SearchValue创建一个类 创建SearchValue类 将其用作模型中的列表 然后使用下面的视图 无需使用映射器或更改模型属性的绑定方式,最简单的方法是为SearchValue创建一个类 创建SearchValue类 将其用作模型中的列表 然

型号:

视图:


FreeText输入字段的传递非常顺利。但是,即使SearchValues字段的下拉列表在页面上正确显示,它在控制器中返回为空计数=0。为什么会这样,我可以将字典传递给控制器吗?

无需使用映射器或更改模型属性的绑定方式,最简单的方法是为SearchValue创建一个类

创建SearchValue类 将其用作模型中的列表 然后使用下面的视图
无需使用映射器或更改模型属性的绑定方式,最简单的方法是为SearchValue创建一个类

创建SearchValue类 将其用作模型中的列表 然后使用下面的视图
通过将kvp从更改为,我能够保留字典格式。显然,模型绑定器只接受字符串格式的键。

通过将kvp从更改为,我能够保留字典格式。显然,模型绑定器只接受字符串格式的键。

您试图将下拉字段ID保存为int,将下拉值保存为string是否正确?@JerdineSabio是的,100%正确。您试图将下拉字段ID保存为int,将下拉值保存为string是否正确?@JerdineSabio是的,100%正确。
public string FreeText { get; set; }
public Dictionary<int, string> SearchValues { get; set; }
public List<DropDownModel> DropDowns { get; set; }
@using (Html.BeginForm("GetSearchResults", "Home", FormMethod.Post))
{
    @Html.TextBoxFor(m => m.FreeText, new { @class = "form-control mb-3", @placeholder = "Search..." })

    foreach (var dropDown in Model.DropDowns)
    {
        @Html.DropDownListFor(m => m.SearchValues[dropDown.DataFieldId], dropDown.ListItems, dropDown.OptionLabel, new { @class = "form-control mb-3" });
    }

    <button type="submit" class="btn btn-primary btn-block">Search</button>
}
public class SearchValue{
   public int Id {get;set;}
   public string value {get;set;}
}
public string FreeText { get; set; }
// replace dictionary
public List<SearchValue> SearchValues { get; set; }
public List<DropDownModel> DropDowns { get; set; }
@using (Html.BeginForm("GetSearchResults", "Home", FormMethod.Post))
{
    @Html.TextBoxFor(m => m.FreeText, new { @class = "form-control mb-3", @placeholder = "Search..." })

    @{
        int counter = 0;
    }
    foreach (var dropDown in Model.DropDowns)
    {
        <input type="hidden" name="SearchValues[@counter].Id" value="@dropdown.DataFieldId">
        @Html.DropDownListFor(m => m.SearchValues[counter].Value, dropDown.ListItems, dropDown.OptionLabel, new { @class = "form-control mb-3" });
        @counter++;
    }

    <button type="submit" class="btn btn-primary btn-block">Search</button>
}