asp.net-mvc - Dictionary<Enum, string>() 不会绑定(bind)到 mvc 中的模型

标签 asp.net-mvc viewmodel

我正在尝试实现一些相当简单的东西,但模型绑定(bind)存在一些问题。

public enum ColumnType
        {
            Column1 = 1,
            Column2 = 2,
            Column3 = 3,
            Column4 = 4,
            Column5 = 5,
            Column6 = 6,
            Column7 = 7,
            Column8 = 8,
            Column9 = 9
        }

此外,在我的 viewModel 中,我有一个类型为字典的属性,如下所示:
public class PageViewModel {
        public IDictionary<ColumnType, string> Columns { get; set; }
}

以下是我的看法:
    <tr>
    <%  foreach (var value in Enum.GetValues(typeof(ColumnType)))
        {
            %>
                <%: Html.TextBox(String.Format("Columns[ColumnType.{0}]", value.ToString()))%>
            <%
        }
    %>
    </tr>

我在上面发布到以下 POST 方法:
[POST]
public ActionResult Index(PageViewModel viewModel)
{
    var isNull = viewModel.Columns; //The model won't bind and 'isNull' is 'null' in here
    ...
    ...
}

如您所见,“viewModel.Columns”属性在 POST 操作中为空。

我在这里想念什么?

关于结果,它应该如下所示:
// pseudocode
Columns[0] = Key=Column1, Value="text1Value";
Columns[1] = Key=Column2, Value="text2Value";
...

我知道肯定有 Columns[0].Key = Column1; Column[0].Value = "text1Value" 之类的东西在 View 内部,但我不确定。

非常感谢你们!

最佳答案

试试这样:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new PageViewModel
        {
            Columns = Enum.GetValues(typeof(ColumnType)).Cast<ColumnType>().ToDictionary(x => x, x => x.ToString())
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(PageViewModel model)
    {
        return View();
    }
}

在 View 中:
<% using (Html.BeginForm()) { %>
    <% for (var i = 0; i < Model.Columns.Count; i++) { %>
        <%= Html.Hidden("Columns[" + i + "].Key", Model.Columns.ElementAt(i).Key) %>
        <%= Html.TextBox("Columns[" + i + "].Value", Model.Columns.ElementAt(i).Value) %>
    <% } %>
    <input type="submit" value="OK" />
<% } %>

关于asp.net-mvc - Dictionary<Enum, string>() 不会绑定(bind)到 mvc 中的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5405443/

相关文章:

asp.net-mvc - ASP .Net Core 自定义标记帮助器将 CamelCase 属性转换为空格

c# - MVVM 中的 ViewModel 是什么

ASP.NET MVC 2 - ViewModel 前缀

asp.net-mvc - MVC 3 _ViewStart,目的是什么?

wpf - 从另一个 ViewModel 类将 View 绑定(bind)到 DataContext

silverlight - 一个 View 模型用于多个页面

design-patterns - ViewModel 是否适合 Model View Presenter 模式?

asp.net-mvc - Angular 2 (SystemJS) XHR 错误(未找到 404)/@angular/animations

asp.net-mvc - 使用 gulp-useref Durandal 和 ASP.NET MVC 进行捆绑和串联

c# - 如何在 C# 中将一种日期格式更改为另一种日期格式,例如 10/10/2014 更改为 2014-10-10(年-月-日)?