【问题标题】:Editor Template casting List to String and back编辑器模板将列表转换为字符串并返回
【发布时间】:2013-07-09 13:54:05
【问题描述】:

我有一个对象列表的编辑器模板。 这为 JQuery 令牌输入提供动力。因此,编辑器模板会创建一个 Javascript 数组以供 JQuery 插件加载。

当我再次提交该表单时,POST 数据显示为逗号分隔的字符串。所以不绑定并抛出无法转换的异常。

在这种情况下,将数据返回到我的控制器并拥有有效的 ViewModel 的最佳做法是什么?

编辑器模板

@model List<SEISMatch.DAL.Entities.Region>

    <script type="text/javascript">
        var existingRegions = [
            @if(Model!=null){
                foreach(var region in Model){
                    if(region!=null){
                        @:{ id: @region.Id, name: "@region.Title" },
                    }
                }
            }
        ];
    </script>

    <input type="text" id="regionselector" name="@ViewData.TemplateInfo.GetFullHtmlFieldName("")">

有一个http://loopj.com/jquery-tokeninput/ 将“区域选择器”输入转换为 AJAX 驱动的令牌建议输入。该输入的值最终成为区域 ID 的 CSV 字符串。

所有这些都正常工作。

提交表单时,它会尝试从输入转换字符串。进入列表并失败。出现无法将字符串转换为“区域”错误。

【问题讨论】:

  • 你能发布一些代码吗?
  • 您需要对列表中的每一项进行任何验证吗?如果不是,为什么不让事情变得更简单呢?只需将数据作为字符串获取,然后在 POST 操作中将其更改为列表。
  • 我已经对 ViewModel 中的许多其他属性进行了验证。所以我依靠 ViewModel.IsValid 来检查这些。

标签: c# asp.net-mvc model-binding mvc-editor-templates


【解决方案1】:

最终创建了我自己的模型绑定器,但在属性级别。 遵循这个 SO 答案: https://stackoverflow.com/a/12683210/1321662

【讨论】:

    猜你喜欢
    • 2013-07-21
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    相关资源
    最近更新 更多