【问题标题】:Validation for dropdown list in MVC验证 MVC 中的下拉列表
【发布时间】:2013-10-10 15:04:29
【问题描述】:

我是 MVC 的新手,我仍在尝试探索 MVC 中的内容。现在我来到了需要对下拉列表进行验证的地方。

我花了相当多的时间在 MVC 中搜索验证。但我不会得到任何适合我的问题的结果。请记住,我是 MVC 新手,如果我的方法在实施验证方面有误,请纠正我。

我创建了这样的模型类:

public class ValidationModel
{
    [Required(ErrorMessage = "Please select atleast one option")]
    public string dropdown { get; set; }
}

在我的控制器中,我正在使用此代码:

@using (Html.BeginForm("selectIndex", "Home", FormMethod.Post))
{
    <select name ="dropdwnMode" id="dropdwnMode" class="textbox">
        <option selected="selected" value="">Select Mode 
        @Html.ValidationMessageFor(Model => Model.dropdown) </option>
        <option value="1"> Add or Update Customer </option>
        <option value="2">Update Customer Credit</option>
     </select>
}

我想要的是当我的下拉列表处于默认的 选择模式 时,它应该显示 请选择至少一个选项 错误,如果用户选择第一个或第二个选项,则不应显示此错误消息。

但是,如果我使用上述方法,现在它不会显示任何消息。那么有人可以指导我实现这一目标吗?

【问题讨论】:

    标签: asp.net-mvc validation razor


    【解决方案1】:

    我建议将模型上的“下拉”属性替换为两个属性 - 一个保存所选值,另一个保存所有可能的值。然后,您可以使用 HTML 帮助程序(Razor 语法)在视图中创建下拉列表,MVC 将负责验证。

    型号:

    public class ValidationModel
    {
        /// <summary>
        ///     ID of the selected option
        /// </summary>
        [Required(ErrorMessage = "Please select at least one option")]
        public int SelectedOptionID { get; set; }
    
        /// <summary>
        ///     Possible values for the dropdown
        /// </summary>
        public IEnumerable<OptionModel> Options { get; set; }
    }
    

    选项模型:

    public class OptionModel
    {
        /// <summary>
        ///     ID (key that uniquely identifies this option)
        /// </summary>
        public int ID { get; set; }
    
        /// <summary>
        ///     Name (value or display text that will be shown in the UI)
        /// </summary>
        public string Name { get; set; }
    }
    

    如果需要,您还可以在选项模型上存储其他属性。或者,您可以使用键值对或字典而不是选项模型来避免创建类,这样会更快但不太清晰。

    查看:

    @model ValidationModel
    
    @using (Html.BeginForm("selectIndex", "Home", FormMethod.Post))
    {
        @Html.ValidationMessageFor(Model => Model.SelectedOptionID)
    
        @Html.DropDownListFor(m => m.SelectedOptionID,
            new SelectList(Model.Options, "ID", "Name"),
            "Select an option") // Default text before the user has selected an option
    }
    

    您可以更好地命名 Options 和 SelectedOptionID 以根据您的实现阐明它们的用法。

    通过此实现,您将(并且应该)从控制器中填充选项列表。当用户选择一个选项时,将填充选定的选项。像这样:

    控制器:

    public ActionResult YourAction()
    {
        ValidationModel model = new ValidationModel();
        model.Options = new List<OptionModel> {
            new OptionModel { ID = 1, Value = "Add or Update Customer" },
            new OptionModel { ID = 2, Value = "Update Customer Credit" }
        }
    
        return View("YourViewName", model);
    }
    

    作为旁注,我建议您在使用它的视图所做的事情之后命名您的 ValidationModel(例如,如果您的视图是整个主页,则为 HomepageModel;如果您的视图只是包含导航下拉菜单的部分视图,则为 NavigationFormModel) .

    【讨论】:

    • 您好,我遵循了您的方法。不知道我在做什么错误。当我在选择一个选项时,它不会触发错误消息。
    猜你喜欢
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 2022-12-05
    相关资源
    最近更新 更多