gpt4 book ai didi

c# - MVC ModelState.IsValid=true 具有 null 必需属性

转载 作者:行者123 更新时间:2023-11-30 23:26:12 26 4
gpt4 key购买 nike

我有这个模型

public class ModelVM
{
private string _rD;
[Required]
public string RD
{
get
{
return _rD;
}
set
{
_rD = RCodes.Contains(value)? value : null;
}
}

private static List<string> RCodes = new List<string>
{
"OK",
"OTHER",
"ANOTHER"
};
}

在我的 MVC Controller 中

public class MyController : Controller
{
public ActionResult Index(ModelVM modelVM, FormCollection collection)
{

if (!ModelState.IsValid)
return Json(new
{
Result = "ERROR",
Message = "Missing fields."
});

return Json("OK");
}
}

我发送:{ RD: "Whatever"}

并在调试 ModelState.IsValid=true。我在 WebApi Controller 上有一个类似的代码,并且按我预期的方式工作 (modelstate.valid=false)

您是否知道为什么 MVC 会这样做?或者我的代码有什么问题?

最佳答案

ModelState.IsValid 告诉您是否已将任何模型错误添加到 ModelState。

在这种情况下它是有效的,因为提供的数据中没有客户端错误会影响 ModelState。

你说...

I sent { RD: "Whatever" }

...这意味着模型绑定(bind)器将查看发送的数据并将属性与预期类型相匹配。从模型绑定(bind)的角度来看,满足了 [Required] 验证,因为当绑定(bind)器查看所需属性 RD 的路由值字典时,它是由客户端在传入数据。

如果您想手动使状态无效,您可以...

public ActionResult Index(ModelVM modelVM, FormCollection collection)
{
if(ModelState.IsValid) {
if(modelVM.RD == null) {
ModelState.AddModelError("RD", "RD is invalid.");
}
}

if (!ModelState.IsValid)
return Json(new
{
Result = "ERROR",
Message = "Missing fields."
});

return Json("OK");
}

关于c# - MVC ModelState.IsValid=true 具有 null 必需属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36949284/

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