gpt4 book ai didi

javascript - 当对集合使用 getter 时,ASP.NET MVC3 模型 Binder 数据无效

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:52:33 25 4
gpt4 key购买 nike

使用此联系人模型

public class Contact
{
public string Name { get; set; }
public ICollection<Phone> Phones { get; set; }

public Phone PrimaryPhone
{
get { return Phones.FirstOrDefault(x => x.Primary) ?? new Phone(); }
}
}

public class Phone
{
public bool Primary { get; set; }
public string PhoneNumber { get; set; }
public string Type { get; set; }
}

还有这个 Controller

public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}

[HttpPost]
public ActionResult Index(Contact contact)
{
return View();
}
}

当我使用 jQuery 发布到 HomeController 索引时

(function ($) {
var myData = {
Name: 'Wesley Crusher',
Phones: [
{ Primary: false, PhoneNumber: '111-111-1111', Type: 'Business' },
{ Primary: true, PhoneNumber: '222-222-2222', Type: 'Personal' },
{ Primary: false, PhoneNumber: '333-333-3333', Type: 'Business' }
],
PrimaryPhone: { Primary: true, PhoneNumber: '111-111-1111', Type: 'Business' }
};

$.ajax({
url: '@Url.Action("Index", "Home")',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(myData)
});
})(jQuery)

模型绑定(bind)器错误地建立了 ICollection Phones。数据是:

  • [0] Primary=false, PhoneNumber="111-111-1111", Type="Business"MVC3ModelBinderJsonTesting.Models.Phone
  • [1] Primary=true, PhoneNumber="111-111-1111", Type="Business"MVC3ModelBinderJsonTesting.Models.Phone
  • [2] Primary=false, PhoneNumber="333-333-3333", Type="Business"MVC3ModelBinderJsonTesting.Models.Phone

PhoneNumber“111-111-1111”重复出现,类型为“Business”而不是“Personal”。这是出于某种原因的预期行为还是错误?

如果你愿意,我可以发布一个示例项目,让我知道。

最佳答案

我认为这是因为它不是原始的。它是一个复杂的对象,因此模型绑定(bind)器会尝试设置其属性。

模型绑定(bind)更适合绑定(bind)代表来自表单的输入的“输入模型”。在输入模型上使用业务逻辑计算属性可能不是您所看到的最佳方法。

您可能将其作为扩展方法(遗憾的是不支持扩展属性)而不是输入模型的属性。甚至是正确的方法。将它作为一个属性会让模型绑定(bind)器认为这是公平的游戏。

如果它是一个只获取原始类型,它不会尝试设置它。

关于javascript - 当对集合使用 getter 时,ASP.NET MVC3 模型 Binder 数据无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9467456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com