真我有这个型号MVC ModelState.IsValid =用空所需的属性
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控制器
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控制器上的类似代码,并按我的预期工作(modelstate.valid=false
)
你有一些想法,为什么MVC这样做?或者我的代码有什么问题?
在调试过程中,如果你把一个断点if语句什么值存储在'modelVM.RD'。 – Nkosi
'ModelState.IsValid'告诉您是否有任何模型错误已添加到'ModelState'。在这种情况下,这是事实,因为ModelState中没有错误。你说你发了'{RD:“无论”}“。默认模型联编程序将查看发送的数据并将属性与预期类型进行匹配。从绑定的角度来看,'[Required]'验证被满足,因为当活页夹查看字典时,在输入数据中提供了所需的属性“RD”。 – Nkosi