我从一个名为StampsCSEMonths_test的表中获得一个下拉列表。我试图提交表格之前需要下拉列表。 不管我是否选择,它总是提交表单的问题。
可能是什么问题? 查看:
walk(plots2, print)
型号:
@model WINHRAdmin.Models.CTS_Stamps
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.DropDownListFor(model => model.stampscsemonths_id, ViewBag.StampsCSEMonths_test as IEnumerable<SelectListItem>, "", new { @class = "form-control " })
@Html.ValidationMessageFor(model => model.stampscsemonths_id, "", new { @class = "text-danger" })
}
控制器:
namespace WINHRAdmin.Models
{
public class CommitmentToServiceModel
{
}
public class CTS_Stamps
{
[Required]
[Range(1,Int32.MaxValue,ErrorMessage ="MonthYerar is required")]
public int? stampscsemonths_id { get; set; }
}
}
答案 0 :(得分:0)
通常,您希望使用客户端库(例如jquery.validate)来阻止表单提交(如果表单无效)。这是一篇有关该主题的好文章:https://www.codeproject.com/Articles/718004/ASP-NET-MVC-Client-Side-Validation。
服务器端MVC验证的常用模式几乎就是您正在执行的操作。您将[Required]属性放在数据模型属性上方。那很好。您的视图中有一个@ValidationMessageFor元素。也很好。
但是,您忘记了检查模型在控制器中是否有效。在处理结果之前,添加对ModelState.IsValid的检查。像这样:
if (!ModelState.IsValid)
{
return View(collection); // assumes collection is the model
}
如果用户提交了无效的表单,则在往返之后,他们将在缺少的字段旁边看到验证错误消息。
希望有帮助。