【问题标题】:TryUpdateModel not working with Dictionary<Enum,string>TryUpdateModel 不适用于 Dictionary<Enum,string>
【发布时间】:2015-05-19 11:49:34
【问题描述】:

假设这些类\枚举:

public enum Test
{
    MyTest1 = 0,
    MyTest2,
    MyTest3,
}

public class Model
{
    public Dictionary<Test, string> TestDictionary { get; set; }
    public Dictionary<string, string> StringDictionary { get; set; }
    public string Other { get; set; }

    public Model()
    {
        TestDictionary = new Dictionary<Test, string>();
        StringDictionary = new Dictionary<string, string>();
    }
}

这个表格:

<form action="/Home/Test" method="post">
    <input type="hidden" name="Model.TestDictionary[MyTest1]" value="myval" />
    <input type="hidden" name="Model.StringDictionary[mykey]" value="myval" />
    <input type="hidden" name="Model.StringDictionary[mykey2]" value="myval2" />
    <input type="hidden" name="Model.Other" value="works" />
    <button type="submit">Submit</button>
</form>

还有这个动作:

public ActionResult Test(FormCollection formCollection)
{
    Model model = new Model();
    TryUpdateModel(model, "Model");
    return Redirect("Index");
}

Model.StringDictionary 已成功更新。
无法获取 Model.TestDictionary 以获取更新。

我尝试了多种方法,例如将输入名称更改为 Test.MyTest1,但无法使其正常工作。

我的输入应该如何看起来像我想填充 Model.TestDictionary 的 id?

【问题讨论】:

  • @Kamo - 感谢您的回答。这不是问题,因为活页夹会寻找“第一级”属性(在我的例子中是两个字典和一个字符串)。

标签: c# asp.net-mvc enums formcollection model-binders


【解决方案1】:

我发现了一个丑陋的解决方法:

<input type="hidden" name="Model.TestDictionary[0].Key" value="MyTest1" />
<input type="hidden" name="Model.TestDictionary[0].Value" value="myval" />

不管怎样,如果有人找到更好的东西,那会很高兴。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 2010-10-23
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 2012-09-21
    相关资源
    最近更新 更多