MVC3 字典未绑定到模型

2024-04-03

我有一个包含字典属性的模型。 (这是从一个更大的项目中提炼出来的,我已确认该示例仍然存在相同的问题)

public class TestModel
{
    public IDictionary<string, string> Values { get; set; }

    public TestModel()
    {
        Values = new Dictionary<string, string>();
    }
}

一个控制器

public class TestController : Controller
{
    public ActionResult Index()
    {
        TestModel model = new TestModel();
        model.Values.Add("foo", "bar");
        model.Values.Add("fizz", "buzz");
        model.Values.Add("hello", "world");

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(TestModel model)
    {
        // model.Values is null after post back here.
        return null; // I set a break point here to inspect 'model'
    }
}

和一个视图

@using TestMVC.Models
@model TestModel
@using (Html.BeginForm())
{
    @Html.EditorFor(m => m.Values["foo"]);
    <br />
    @Html.EditorFor(m => m.Values["fizz"]);
    <br />
    @Html.EditorFor(m => m.Values["hello"]);
    <br />
    <input type="submit" value="submit" />
}

这会像这样呈现给浏览器:

<input class="text-box single-line" id="Values_foo_" name="Values[foo]" type="text" value="bar" />

我遇到的问题是回发后模型上的字典为空。

  • 我这样做对吗,还是有更好的方法?

我需要某种键值存储,因为表单上的字段是可变的,所以我不能使用 POCO 模型。


请阅读 Scott Hanselman 关于该主题的博客文章以了解更多详细信息,但同时, 为了解决您的问题,只需将您的视图替换为以下内容:

<input type="hidden" name="Values[0].Key" value="foo" />
<input type="text" name="Values[0].Value" value="bar" />

对所有部分重复相同的操作,也许将其放入 for 循环中,例如:

@for(i=0;i<Model.Values.Count;i++)
{
    @Html.Hidden("Values[@i].Key", @Model.Values.Keys[@i])
    @Html.TextBox("Values[@i].Value", @Model.Values.Values[@i])
}

请注意,仅当您使用索引时才可以通过索引访问键和值有序字典 http://msdn.microsoft.com/en-us/library/system.collections.specialized.ordereddictionary.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC3 字典未绑定到模型 的相关文章

随机推荐

  • jQuery 选择器检查元素是否动画隐藏

    有没有办法判断一个元素是否被隐藏或当前正在隐藏 通过动画 我能想到的唯一方法是将标志存储在元素的data你打电话时show or hide 但我想知道是否还有其他方法 你能为它做一个自定义的 jQuery 选择器吗 function var
  • 可达性 - 奇怪的问题

    Reachability r Reachability reachabilityWithHostName www google com 这条线在设备上工作正常 但在模拟器上我崩溃了 由于未捕获的异常 NSInvalidArgumentExc
  • 如何在 jQuery 中读取绑定的悬停回调函数

    我使用 jQuery 为页面上的元素设置悬停回调 我现在正在编写一个模块 需要临时为某些元素设置新的悬停行为 新模块无法访问悬停功能的原始代码 我想在设置新的悬停功能之前存储旧的悬停功能 以便在完成临时悬停行为后可以恢复它们 我认为这些可以
  • 从 bash 在默认编辑器中打开文件

    如何使用 bash 打开使用默认 GUI 编辑器生成的脚本生成的文件 在 OS X 上有命令open 但据我所知 linux 上不存在 什么是好的跨平台替代方案 执行open somefile ext在 OS X 上 效果与我在 Finde
  • 无法在 ASP.NET 中纠正 VeraCode CWE ID 918 - (SSRF)

    长话短说 无论我如何尝试 VeraCode 都会继续将我的 8 行代码标记为 CWE 918 缺陷 这是旧代码 所以我不确定为什么它突然被标记 这是一个示例 offending 方法 其中标记行以粗体显示 public virtual as
  • ItemTouchHelper startSwipe 不起作用

    我尝试在适配器内使用 startSwipe 但似乎不起作用 奇怪的是 当我尝试用手指手动滑动它时 它起作用了 只是当我单击支架内的按钮时 startSwipe 不起作用 需要这方面的帮助 这是我调用 startSwipe 的地方 在 onC
  • Intellij+Springboot+Thymeleaf+gradle - 自动重新加载html资源

    我正在使用 IntelliJ Ultimate Spring Boot 和 Thymeleaf 我想启用 HTML 自动重新加载 而无需重新启动服务器 也无需使用 CTRL F9 我已经阅读了以下内容 我认为它应该有效 但事实并非如此 ht
  • 自定义适配器不显示任何项目

    这是先前问题的后续 ListView android 行中的 ImageButton 不工作 https stackoverflow com questions 29819256 imagebutton within row of list
  • Google 地图路线 API - 到达时间?

    我使用 Google Directions API 来计算两个地点之间所需的时间 API 给了我一个选择departure time 我可以在其中传递出发时间 或 现在 的时间戳 那么答案就是duration in traffic 这真的很
  • 使用 PyQT 逐帧加载 opencv 视频

    我正在尝试加载一个 mat 文件 具有被跟踪对象的位置坐标 并加载一个视频文件 为了加载视频文件 我使用 opencv 我制作了一个 GUI 来加载它们 一旦有人按下开始按钮 视频就会开始播放 暂停会停止播放 这是它的 GUI 这是我遇到的
  • 如何从 Perl 设置 Windows PATH 变量?

    我需要在 Perl 中设置环境变量 理想情况下 我需要查询一个变量 然后在不需要时更改它 具体来说 我要更改的是 PATH 变量 我如何获取和设置这些变量 如果您需要全局且永久地更改环境变量 就像在控制面板中设置它一样 那么您必须与注册表混
  • 捕获一个索引位置中的字符串并移动到 xml 文件中的另一个索引位置

    我是一名 Python 初学者 想要将现有的 xml 文件转换为 LaTeX 文档 xml 包含许多脚注 有时会被拆分 因为它们不适合原始文档 一本旧书 中的一页 并且 xml 文件的创建者希望布局尽可能接近原始文档 在分割的脚注之间有普通
  • git log 不显示提交,但 git log 显示编辑文件的提交

    我在寻找丢失的零钱时发现了这个奇怪的问题 我输入 git log httpd conf 我按照预期得到了一堆提交哈希 但不是我所做的 当我输入 git log 我看到了我所做的承诺 当我跑步时 git show
  • 安装最新版本的 jenkins 时出现问题

    在我的 Ubuntu 机器上 我尝试本地安装 jenkins 我已经遵循了这个指南 https wiki jenkins ci org display JENKINS Installing Jenkins on Ubuntu https w
  • 无法使用 add() 添加 jvmArgs,为什么?

    谁能解释为什么第一个示例有效而第二个示例不起作用 test jvmArgs Xdebug Xrunjdwp transport dt socket server y suspend y address 4000 test jvmArgs a
  • MySQL InnoDB auto_increment 值增加 2 而不是 1。 病毒?

    有一个 InnoDB 表 用于存储自定义构建的 Web 应用程序使用的博客文章的评论 最近我注意到评论的自动递增主键值增加了 2 而不是仅增加 1 我还注意到 在另一个用于记住最后几个评论者的足迹签名 例如 ip 会话 id uagent
  • 如何使用 Google Guice 实现“机器人腿”用例?

    我正在学习 Google Guice 你知道如何实现 机器人腿 问题吗 让我用一个例子来解释这一点 假设我有一些名为Service Singleton public class Service Inject Source source 界面
  • ruby on Rails rspec 错误

    我正在阅读 通过示例学习 Rails 一书 并尝试运行测试 由于某种原因 我无法让 rspec 正常工作 如果我运行rspec spec 按照他的指示执行命令 我收到以下错误 rspec spec home desktop rvm gems
  • Mysql select for update - 它没有锁定目标行。我如何确保它确实如此?

    所以 select for update 的语法是这样的 SELECT 1st query FROM test WHERE id 4 FOR UPDATE UPDATE test 2nd query SET parent 100 WHERE
  • MVC3 字典未绑定到模型

    我有一个包含字典属性的模型 这是从一个更大的项目中提炼出来的 我已确认该示例仍然存在相同的问题 public class TestModel public IDictionary