2013-10-10 4 views
3

Я новичок в MVC, и я все еще пытаюсь изучить материал внутри 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> 
    } 

Вот что я хочу, когда мой раскрывающийся список в Выбрать Режим, который по умолчанию, должен показывать , пожалуйста, выберите хотя бы один вариант ошибки, и если пользователь выбирает 1-й или 2-й вариант, это сообщение об ошибке не должно отображаться.

Но теперь он не отображает никаких сообщений, если я использую вышеуказанный подход. Так может ли кто-нибудь помочь мне в достижении этого?

ответ

4

Я бы порекомендовал заменить свое свойство «Dropdown» на модель двумя свойствами - одним из которых будет удерживать выбранное значение и значение, которое будет содержать все возможные значения. Затем вы можете использовать хелпер 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; } 
} 

OptionModel:

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 
} 

Вы могли бы назвать Опции и 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, если вашему view - это просто частичный вид, содержащий раскрывающееся меню для навигации).

+0

Привет, я последовал за вашим подходом. Не знаю, какую ошибку я делаю. Когда я нахожусь в опции «Выбрать», это сообщение об ошибке не срабатывает. – Ajay

Смежные вопросы