4
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        var key = new Dictionary<string, object>();
        key.Add("CPLID", new object());
        key.Add("EqID", new object());
        key.Add("Shift", new object());
        key.Add("DateTime", new object());
        key.Add("UpdateDateTime", new object());
        key.Add("No", new object());
        key.Add("LineStop.Remark", new object());
        key.Add("IsRemark", new object());
        key.Add("DispatchID", new object());
        key.Add("CopperID", new object());
        key.Add("CopperLV", new object());
        key.Add("InThickness", new object());
        key.Add("InWidth", new object());
        key.Add("OutWidth", new object());
        key.Add("OutLength", new object());
        key.Add("OutPiece", new object());
        key.Add("WeldingNum", new object());
        key.Add("GuideNum", new object());
        key.Add("Supply", new object());
        key.Add("Produce", new object());
        key.Add("ReturnMaterial", new object());
        key.Add("StartTime", new object());
        key.Add("EndTime", new object());
        key.Add("PrelineNum", new object());
        key.Add("SelflineNum", new object());
        key.Add("ProcessModeNum", new object());
        key.Add("ProcessResultNum", new object());
        key.Add("ProcessMode[0].CopperID", new object());
        key.Add("ProcessMode[0].Mode", new object());
        key.Add("ProcessMode[1].CopperID", new object());
        key.Add("ProcessMode[1].Mode", new object());
        key.Add("ProcessMode[2].CopperID", new object());
        key.Add("ProcessMode[2].Mode", new object());
        key.Add("ProcessMode[3].CopperID", new object());
        key.Add("ProcessMode[3].Mode", new object());
        //key.Add("ProcessMode[4].CopperID", new object());
        //key.Add("ProcessMode[4].Mode", new object());
        DictionaryValueProvider<object> ob = new DictionaryValueProvider<object>(key, CultureInfo.CurrentCulture);

        Assert.IsTrue(ob.ContainsPrefix("ProcessMode"));
    }
}

上記のサンプル テスト コードを MVC3 で実行すると動作します。ただし、「ContainsPrefix」メソッドは MVC3 では問題ありませんが、MVC4 では正しく動作しません。

そして、さらにアイテムを追加しようとすると。ProcessMode[4].CopperIDand (remove comment).. MVC4 ProcessMode[4].Modeで正しく動作します。

とても奇妙だと思います,</p>

この問題により、「JSON コンテンツを含む ajax を投稿してください」というエラーが発生することがあり、エラーが発生DefaultModelBinderしたデータが生成されます。

ContainsPrefixMVC3とMVC4で方法が違うのですか?

12/7更新

http://forums.asp.net/t/1856357.aspx/1?FormValueProvider+skips+form+values

同じ質問ですが、MVC4 を使用できません

「バイナリ検索」でプレフィックス文字列を検索します

「。」を作ります および '[' は一致をスキップします

4

1 に答える 1

1

私は解決策を見つけました.................................................:

http://weblogs.asp.net/imranbaloch/archive/2012/12/08/fixing-model-the-binding-issue-of-asp-net-mvc-and-asp-net-web-api.aspx

于 2012-12-15T12:29:01.143 に答える