我有这个模型
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会这样做?或者我的代码有什么问题?
答案 0 :(得分:2)
ModelState.IsValid
告诉您是否已将任何模型错误添加到ModelState。
在这种情况下,它是有效的,因为提供的数据中没有客户端错误会影响ModelState。
你说......
我发送了{RD:“随便”}
...这意味着模型绑定器将查看发送的数据并将属性与预期类型匹配。从模型绑定的角度来看,[Required]
验证得到满足,因为当绑定器查看所需属性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");
}