Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC中覆盖的下拉自定义验证消息_C#_Asp.net Mvc_Validation_Drop Down Menu - Fatal编程技术网

C# MVC中覆盖的下拉自定义验证消息

C# MVC中覆盖的下拉自定义验证消息,c#,asp.net-mvc,validation,drop-down-menu,C#,Asp.net Mvc,Validation,Drop Down Menu,我是一个MVC noob,我试图通过添加ModelState.modelerror来验证DropDownList并显示自定义错误消息。在内部,我的字段“Board”(屏幕上显示的下拉列表)称为“ProviderId”。在UI上,当我没有从下拉列表中选择值时,我想看到消息“Board cannot be empty”,但我只看到“ProviderId field is required”。此方法似乎适用于其他编辑字段 这是我的控制器代码 [HttpPost] public Ac

我是一个MVC noob,我试图通过添加ModelState.modelerror来验证DropDownList并显示自定义错误消息。在内部,我的字段“Board”(屏幕上显示的下拉列表)称为“ProviderId”。在UI上,当我没有从下拉列表中选择值时,我想看到消息“Board cannot be empty”,但我只看到“ProviderId field is required”。此方法似乎适用于其他编辑字段

这是我的控制器代码

  [HttpPost]
        public ActionResult Create(CourseList courselist)
        {
           //This works! It shows Class Name cannot be Empty next to class field on submit
            if (courselist.CourseName == null)
            {
                ModelState.AddModelError("CourseName", " Class Name cannot be Empty");
                ViewBag.ProviderID = new SelectList(db.ProviderLists, "ProviderID", "ProviderName", courselist.ProviderID);
                return View(courselist);
            }
//This does not work! It shows the internal binding message instead of this custom message
            if (courselist.ProviderID == null)
            {
                ModelState.AddModelError("ProviderID", " Board cannot be Empty");
                ViewBag.ProviderID = new SelectList(db.ProviderLists, "ProviderID", "ProviderName", courselist.ProviderID);
                return View(courselist);
            }

            if (ModelState.IsValid)
            {
                db.CourseLists.Add(courselist);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            ViewBag.ProviderID = new SelectList(db.ProviderLists, "ProviderID", "ProviderName", courselist.ProviderID);
            return View(courselist);
        }
这是我的相关视图代码

 <div class="editor-field">
            @Html.DropDownList("ProviderID", String.Empty)
            @Html.ValidationMessageFor(model => model.ProviderID)
        </div>

@Html.DropDownList(“ProviderID”,String.Empty)
@Html.ValidationMessageFor(model=>model.ProviderID)
它适用于其他两个编辑字段,即在我提交时在字段旁边打印自定义消息,但它总是将内部绑定消息“providerId字段是必需的”放入下拉列表。要将消息更改为自定义添加的消息,我必须做什么。代码中的所有下拉列表都会发生这种情况!ProviderId是数据库中的必填字段,henc我正在查看消息,但如何覆盖它以显示自定义消息?也许这是一个简单的解决方案,但我对MVC完全没有兴趣(2小时),我想解决这个问题

“板不能为空”


已编辑:该字段是ProviderID

我猜您使用的是数据库优先(或模型优先)方法,因此您有一个
edmx
文件和相应的
.Designer.cs
文件。在最后一个文件中,您可能有如下内容:

[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
[DataMemberAttribute()]
public global::System.Int32 ProviderID
[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
[DataMemberAttribute()]
public Nullable<global::System.Int32> ProviderID
这里,类型
int
不可为空,并且该属性具有元数据属性
IsNullable=false
。这就是为什么ASP.NET MVC会给出默认的错误消息

一个简单的解决方法是将数据库中的字段设置为非必需,然后更新模型。之后,您应该在
.Designer.cs
中看到如下内容:

[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
[DataMemberAttribute()]
public global::System.Int32 ProviderID
[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
[DataMemberAttribute()]
public Nullable<global::System.Int32> ProviderID

当您填写除providerId之外的所有其他字段时,它是否仍然打印“providerId字段是必需的”?是的。另一件有趣的事情是,如果我用其中一个编辑文本字段替换ProviderId,那么它打印的板不能是空的。有趣的是,让我看看它