-1

MVC4 を使用したカスタム属性ベースの検証があります

propertyinfo[]を使用して次のコードを使用して、テキストボックスにユーザーが入力した値を取得できます

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

しかし、ユーザーが選択したドロップダウン値を取得できません。

  1. コードを変更する必要はありますか?

  2. メソッドobject valueに NULL として入っています。IsValidなぜそうなのか、何か考えはありますか?

検証

   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; }
}

見る

@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" />
}

誰かがこれについて何かアイデアを提案してくれますか...どうもありがとう....

4

1 に答える 1

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)
于 2013-07-29T14:35:53.803 に答える