MVC模型绑定。无效的属性/字段名称"注意"

时间:2018-02-23 16:36:22

标签: c# asp.net asp.net-mvc

我只是想让一些简单的模型绑定工作!

我的模型,使用Entity Framework定义,有一个名为"注意"的属性。

public partial class ContractNote
{
    public short Id { get; set; }
    public short ContractId { get; set; }
    public System.DateTime Date { get; set; }
    public string Note { get; set; }
    public Nullable<System.DateTime> CompletionDate { get; set; }
    public bool Completed { get; set; }
 }

我正在使用Ajax调用从网页上的模式表单发回更新的数据。

        $.ajax({
        url: '@urlHelper.Action("EditNote", "Contracts")',
        type: "POST",
        contentType: "application/json;charset=utf-8",
        data: JSON.stringify({ Id: noteId, ContractId: contractId, Date: date, Note: note, CompletionDate: cdate, Completed: completed }),
        success: function (data) {
            switch (data.status) {
                case "error":
                    alert(data.message);
                    break;
                default:
                    Refresh(model.notes);
                    break;
            }
        },

控制器操作尝试绑定到ContractNote对象。

public JsonResult EditNote(ContractNote note)
{ .... }

我无法让这个工作 - 绑定的对象&#34;注意&#34;永远是空的。我发现我可以发布所有字段,除了&#34;注意&#34;。如果我把它排除在外它就可以了。

此外,我在我的代码中创建了一个虚拟类,与ContractNote完全相同,但是使用了属性&#34; Note&#34;重命名为&#34; xyz&#34;。

public class ContractNoteJSON
{
    public short Id { get; set; }
    public short ContractId { get; set; }
    public System.DateTime Date { get; set; }
    public string xyz { get; set; }
    public Nullable<System.DateTime> CompletionDate { get; set; }
    public bool Completed { get; set; }
}

我相应地更新了我的控制器和Ajax代码。

令人难以置信的是,这完全结合了!因此,似乎MVC模型绑定器在名为&#34;注意&#34;的字段中存在问题。具体

有人可以确认是这种情况吗?有没有办法可以解决这个问题? 我能够更改数据库和EF以给它一个不同的名称,但我不愿意,我很想知道是否可以进行一些简单的映射。

提前致谢

道格

1 个答案:

答案 0 :(得分:1)

我相信你需要重命名你的动作参数:

public JsonResult EditNote(ContractNote postedNote)

必须发生的是模型绑定尝试将发布的note参数的值与类型ContractNote的操作方法参数匹配,只是因为它们具有相同的名称。这当然失败了,因为发布的值只是一个字符串。重命名方法参数应该可以解决这个问题。