gpt4 book ai didi

jquery - 如何将 ASP.NET Core WebAPI 方法绑定(bind)到模型的 bool 字段?

转载 作者:行者123 更新时间:2023-12-01 04:39:43 24 4
gpt4 key购买 nike

我有一个表单,要使用 JQuery 发布到我的 WebAPI 端点:

<form>
Email: <input type="email" name="email" /><br>
Name: <input type="text" name="name" /><br>
<input type="checkbox" name="agree" /> I wish to subscribe
</form>

...

function Subscribe() {
$.ajax({
url: "api/Subscription/subscribe",
method: "POST",
data: $("#SubscriptionForm").serialize()
})
.done(function() { alert("yay!"; })
.fail(function() { alert(":("); });
}

正如预期的那样,以 application/x-www-form-urlencoded 形式提交表单(例如,email=me@domain.com&name=Joe&agree=on)。在接收端,我的 API 方法如下所示:

[HttpPost("subscribe", Name = "Subscribe")]
public IActionResult Subscribe(Subscription subscription) {
if(!ModelState.IsValid) {
return BadRequest();
}
SubscriptionRepository.Create(subscription);
return Ok();
}

Subscription 是一个 POCO,其中包含与提交的表单字段相对应的一些 stringbool 类型,例如:

public class Subscription {
string Email { get; set; }
string Name { get; set; }
bool Agree { get; set; }
}

问题

只要没有选中表单上的任何复选框,WebAPI 方法就能够成功将其他表单字段绑定(bind)到模型。但是,当至少选中一个复选框时,ModelState.IsValid 返回 false。

我怀疑 WebAPI 无法将选定复选框传递的 on 值转换为 bool。这似乎是一个非常基本的普遍需求,那么我是否错过了一些简单的东西?

最佳答案

如果复选框具有value属性,则在提交表单(并且选中复选框)时将发布该属性。如果未选中该复选框并且您尝试提交表单,则该项目将不会提交,因此您的 boolean 属性将获得默认值 false

如果复选框没有 value 属性,那么当您选择复选框并提交表单时,将发送值 "on" (这就是您所发生的情况),如果选中未选择框,则不会为该元素发送任何内容。

因此,只需将 value="true" 添加到呈现复选框的 html 中即可。

<form id="SubscriptionForm">
Email: <input type="email" name="email" /><br>
Name: <input type="text" name="name" /><br>
<input type="checkbox" value="true" name="agree" /> I wish to subscribe
<input id="submit" type="submit" />
</form>

此外,您还需要确保您的属性是 public ,否则模型绑定(bind)程序将无法设置这些属性的值!

public class Subscription 
{
public string Email { get; set; }
public string Name { get; set; }
public bool Agree { get; set; }
}

关于jquery - 如何将 ASP.NET Core WebAPI 方法绑定(bind)到模型的 bool 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41418251/

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