3

我是 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>
}

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

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

4

1 回答 1

4

我建议用两个属性替换模型上的“下拉”属性 - 一个保存所选值,另一个保存所有可能的值。然后,您可以使用 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)。

于 2013-10-10T15:52:04.410 回答