MVC绑定显式属性

时间:2012-03-23 07:56:33

标签: asp.net asp.net-mvc-3

我有一个具有显式属性的模型类,似乎MVC绑定器不绑定它们。我收到错误

System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary

这是已知的问题吗?我在谷歌上找不到任何关于此的文档。

我的班级

 public interface IPdf2Source
    {
        string Password { get; set; }
        string OutputFormatSelected { get; set; }
    }

    public class OptionModel : IPdf2Source
    {

        public IPdf2Source Pdf2Source
        {
            get { return this; }
        }


        //Bind Ok
        public string Email { get; set; }


        //I get error on these properties while binding.
        string IPdf2Source.Password { get; set; }
        string IPdf2Source.OutputFormatSelected { get; set; }
    }

查看

@using (Html.BeginForm())
{
    @Html.TextBoxFor(p => p.Email)
    @Html.TextBoxFor(p => p.Pdf2Source.Password)  
    @Html.HiddenFor(p=>p.Pdf2Source.OutputFormatSelected)
}

Controller Action,因为绑定失败而从未调用过。如果我删除显式声明的属性,一切正常。

public JsonResult ValidateFile(OptionModel formData)
{ 
}

1 个答案:

答案 0 :(得分:0)

    //I get error on these properties while binding.
    string IPdf2Source.Password { get; set; }
    string IPdf2Source.OutputFormatSelected { get; set; }

为什么那些人甚至在那里?这不是正确的语法。此外,您已在界面中定义了这些值。

修改

你是对的,抱歉我对显式接口定义有点过时了。实际上看起来你几乎完美地完成了所有事情,但现在我看着它,我想我看到了你的问题。您似乎需要将显式定义更改为public

    public string IPdf2Source.Password { get; set; }
    public string IPdf2Source.OutputFormatSelected { get; set; }