我只是想让一些简单的模型绑定工作!
我的模型,使用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以给它一个不同的名称,但我不愿意,我很想知道是否可以进行一些简单的映射。
提前致谢
道格
答案 0 :(得分:1)
我相信你需要重命名你的动作参数:
public JsonResult EditNote(ContractNote postedNote)
必须发生的是模型绑定尝试将发布的note
参数的值与类型ContractNote
的操作方法参数匹配,只是因为它们具有相同的名称。这当然失败了,因为发布的值只是一个字符串。重命名方法参数应该可以解决这个问题。