0

以下のようなビューにラジオボタンリストがあります..

意見:

  <div class="deleteControls">
    <div class="labelHead">@Html.Label("Delete")</div>
    <div class="controlsAndLabels">@Html.RadioButtonFor(m => m.Submit,  MVC.Models.SubmitAction.DeleteItem) @Html.Label("Delete By Item")</div>
    <div class="controlsAndLabels">@Html.RadioButtonFor(m => m.Submit, MVC.Models.SubmitAction.DeleteVendor)  @Html.Label("Delete By Vendor")</div>
    <div class="controlsAndLabels" style="padding-left: 20px;">@Html.CheckBoxFor(m => m.IsCancelPageChecked, "Cancel Page") @Html.Label("Cancel Page")</div>
    <div class="controlsAndLabels">@Html.RadioButtonFor(m => m.Submit, MVC.Models.SubmitAction.DeleteMember) @Html.Label("Delete By Member")</div>
 </div>

これは、ラジオボタンのプロパティを定義しているビューのモデルです

モデル:

    public SubmitAction Submit { get; set; }
    public bool IsCancelPageChecked { get; set; }

    [DeleteByItemValidator("ByItem")]
    [Display(Name = "By Item")]
    public string ByItem { get; set; }

    [Display(Name = "By Vendor")]
    public string ByVendor { get; set; }

    [Display(Name = "By Member")]
    public string ByMember { get; set; }

    [Display(Name = "Cancel Page")]
    public string CancelPage { get; set; }

ラジオボタンリストをバインドするためのこの列挙型

public enum SubmitAction
{
    DeleteItem,
    DeleteVendor,
    DeleteMember

}

以下のようなカスタムバリデーターを使用して、サーバー側でカスタム検証を行っています

 public class DeleteByItemValidator : ValidationAttribute
 {
    public string DeleteByItemRadioButton { get; set; }

    public DeleteByItemValidator(string deleteByItemRadioButton)
    {
        this.DeleteByItemRadioButton = deleteByItemRadioButton;
    }

    protected override ValidationResult IsValid(object currentValue, ValidationContext validationContext)
    {
        if (IsRadionButtonSelected(validationContext, DeleteByItemRadioButton))
        {
            // here I am doing validaions
        }
        return ValidationResult.Success;
    }

    // this method is giving always false even if i selected one radio button 
    private bool IsRadionButtonSelected(ValidationContext validationContext, string PropertyToSelect)
    {
        Type iType = validationContext.ObjectInstance.GetType();
        object RadioButtonSelectedValue = iType.GetProperty(PropertyToSelect).GetValue(validationContext.ObjectInstance, null);//here I am getting null value 
        bool isChecked = Convert.ToBoolean(RadioButtonSelectedValue);
        return isChecked;
    }
}

私の問題は、ラジオ ボタンが選択されているかどうかを確認しておらず、ラジオ ボタンを選択した場合でも、このメソッドが false の値を返していることです。

 private bool IsRadionButtonSelected(ValidationContext validationContext, string PropertyToSelect)` 

ラジオボタンの選択を検証するのにこの方法は正しいですか、それとも他のアプローチがありますか?アイデアを提案してください。

ラジオボタンが選択されているかどうかを確認する方法を知っている人はいますか

どうもありがとう

4

4 に答える 4

0

プロパティにアクセスするバリデータコードは正しいです。ビューで ByItem を使用していないため、null です。また、文字列の代わりにブール値を使用します。それはうまくいくはずです。

アップデート:

   @Html.RadioButtonFor(m => m.ByItem,  Model.ByItem) @Html.Label("Delete By Item")

    [DeleteByItemValidator("ByItem")]
    [Display(Name = "By Item")]
    public bool ByItem { get; set; }
于 2013-10-15T11:53:24.527 に答える
0

私が理解している限り、ラジオボタンがチェックされていることを検証しようとしています。[Required]プロパティに属性を追加して、メソッドpublic SubmitAction Submit { get; set; }を削除してみませんか?IsRadionButtonSelected

于 2013-10-15T11:29:55.057 に答える