Asp.net mvc 3 为什么我得到ModelState.IsValid=false?

Asp.net mvc 3 为什么我得到ModelState.IsValid=false?,asp.net-mvc-3,Asp.net Mvc 3,我有一个更新控制器动作,在表单发布时调用。 表单中有一个单选按钮,用于控制下拉字段的可见性 若下拉字段可见,并且我发布了表单,那个么数据库会很好地更新,ModelState是有效的 当下拉字段隐藏并且我发布表单时,它会发布并更新数据库。 但是ModelState.IsValid=false,下拉列表被报告为缺少值 如何解决这个问题 [HttpPost] public ActionResult Update(ResponseModel model) { //ModelState.IsVali

我有一个更新控制器动作,在表单发布时调用。 表单中有一个单选按钮,用于控制下拉字段的可见性 若下拉字段可见,并且我发布了表单,那个么数据库会很好地更新,ModelState是有效的

当下拉字段隐藏并且我发布表单时,它会发布并更新数据库。 但是ModelState.IsValid=false,下拉列表被报告为缺少值

如何解决这个问题

[HttpPost]
public ActionResult Update(ResponseModel model)
{
   //ModelState.IsValid = false when dropdown field hidden

   //validate form fields
   //update database

   //if we are here, then db update successful
   AjaxResponse.AddJsonItem("msg", "Success");
   return Result();
}

可能是您的ResponseModel有一个用一些数据注释(如[Required])注释的属性,当您取消选中单选框时,该属性不会得到值

发布模型,并在状态无效时发布收到的值(通过签入调试器)



因为你只有一个属性,那就是整数。您的模型状态无效,因为整数不能有空值。将其隐藏时,模型没有int属性的值。要么用radio box上的隐藏字段替换下拉列表,要么将其设置为可为空的int。

public class ResponseModel{public int Limit{get;set;}}}我已经检查过了。公共类响应模型{public int Limit{get;set;}}}Great catch Hasan。修复很容易。刚刚在下拉列表中为默认选定值添加了一个值。