2013-07-29 3 views
-1

У меня есть проверки на основе пользовательских атрибутов с использованием MVC4 вПолучения выбранного пользователя выпадающего значение

я могу получить пользователь, введенное значение в текстовом поле, используя следующий код, используя PropertyInfo []

PropertyInfo textBoxEnteredValue = validationContext.ObjectType.GetProperty("TxtCrossField"); 

Но я не могу чтобы получить выбранное пользователем значение раскрывающегося списка.

  1. Есть ли какие-либо изменения в коде должны быть сделаны, пожалуйста предложить

  2. object value приходит в NULL в метод IsValid. Любая идея, почему это так?

Validation

protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    {    
     //Working 
PropertyInfo textBoxEnteredValue = validationContext.ObjectType.GetProperty("TxtCrossField"); 

     //How to get the selected item? 
     PropertyInfo selectedDropdownlistvalue = validationContext.ObjectType.GetProperty("DDlList1");     
    } 

Модель

public class CrossFieldValidation 
{   
    public string DDlList1 
    { get; set; } 

    // [Required(ErrorMessage = "Quantity is required")] 
    [ValueMustbeInRange] 
    [Display(Name = "Quantity:")] 
    public string TxtCrossField 
    { get; set; } 
} 

VIEW

@model MvcSampleApplication.Models.CrossFieldValidation 
@{ 
    ViewBag.Title = "DdlCrossFields"; 
} 
<h2>DdlCrossFields</h2> 
@using (Html.BeginForm("PostValues", "CrossFieldsTxtboxes")) 
{ 
    @Html.ValidationSummary(true) 
    <div class ="editor-field"> 
     @Html.TextBoxFor(m => m.TxtCrossField) 
     @Html.ValidationMessageFor(m=>m.TxtCrossField) 
    </div> 
    @*@Html.DropDownList("DDlList1",(IEnumerable<SelectListItem>)ViewBag.itemsforDropdown)*@   
     @Html.DropDownList("ItemsforDrop", ViewBag.ItemsforDrop as SelectList,"Select A state", new {id= "State"}) 

<input id="PostValues" type="Submit" value="PostValues" /> 
} 

любой PLS предложит любые идеи по этому ... Большое спасибо ....

ответ

0

Метод, отвечающий за получение размещенной формы, должен принять вашу модель в качестве аргумента. Пока ваш DDL привязан к свойству в этой модели, вы будете в состоянии получить выбранное значение, как это:

контроллер

[...some attributes...] 
public static void MethodInController(YourModelType model) 
{ 
    var selectedValue = model.DropDownListSelectedValue; 
} 

Модель

public class YourModelType 
{ 
    public List<SomeType> DropDownOptions { get; set; } 
    [YourValidationAttribute] 
    public string DropDownListSelectedValue { get; set; } 
} 

Класс атрибута проверки

public class YourValidationAttribute : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     //return based on conditions of "value" 
    } 
} 

Посмотреть

@Html.DropDownListFor(model => model.DropDownListSelectedValue, model.DropDownListOptions) 
+0

, как я могу использовать это в пользовательской функции атрибута –

+0

забывали, что, ха-ха. Обновлен мой ответ. –

+0

hmm спасибо, но, на мой взгляд, у меня есть два элемента управления - это выпадающее меню, а другое - текстовое поле. Я хочу получить доступ к обоим значениям в пользовательской функции атрибута, поэтому мне нужно добавить два атрибута проверки или один из них. –

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