【问题标题】:MVC3 radio buttons validationMVC3 单选按钮验证
【发布时间】:2012-10-18 21:34:49
【问题描述】:

我有一个关于单选按钮和检查的问题。

首先,在我看来,我有一个带有登录值的文本框。在这个文本框和提交按钮之间,我有 5 个单选按钮。这些 rb 中的每一个都引用了我的 ViewModel 中的一个属性。

所以这里是代码。 我的 ViewModel 的属性:

public class DeleteUAInfosViewModel
{

    [Display(Name = "UserAccountDeleteInfos", ResourceType = typeof(UserAccountResources))]
    public string UserLeave
    {
        get { return UserAccountResources.UserLeave; }
    }

    [Display(Name = "UserAccountDeleteInfos", ResourceType = typeof(UserAccountResources))]
    public string UserTransfer
    {
        get { return UserAccountResources.UserTransfer; }
    }

    [Display(Name = "UserAccountDeleteInfos", ResourceType = typeof(UserAccountResources))]
    public string UserDetachment
    {
        get { return UserAccountResources.UserDetachment; }
    }

    [Display(Name = "UserAccountDeleteInfos", ResourceType = typeof(UserAccountResources))]
    public string UserRetirement
    {
        get { return UserAccountResources.UserRetirement; }
    }

    [Display(Name = "UserAccountDeleteInfos", ResourceType = typeof(UserAccountResources))]
    public string UserStatus
    {
        get { return UserAccountResources.UserStatus; }
    }
}

我在其中链接 DeleteUAInfosViewModel 的 IndexViewModel:

public class IndexViewModel
{
        [Display(Name = "DeleteUAInfos", ResourceType = typeof(UserAccountResources))]
        public DeleteUAInfosViewModel DeleteUAInfosGroup { get; set; }

        public IndexViewModel()
        {
            DeleteUAInfosGroup = new DeleteUAInfosViewModel();
        }

        ...
}

我的部分视图与 rb 的声明:

@model MyPath.UserAccount.DeleteUAInfosViewModel

<div id="UserDeleteInfosField">
    <p>
        @Html.RadioButton("RbDeleteGroup", Model.UserLeave)
        @UserAccountResources.UserLeave
        @Html.HiddenFor(x => x.UserLeave)   
    </p>
    <br />
    <p>
        @Html.RadioButton("RbDeleteGroup", Model.UserTransfer)
        @UserAccountResources.UserTransfer
        @Html.HiddenFor(x => x.UserTransfer)   
    </p>
    <br />
    <p>
        @Html.RadioButton("RbDeleteGroup", Model.UserDetachment)
        @UserAccountResources.UserDetachment
        @Html.HiddenFor(x => x.UserDetachment)   
    </p>
    <br />
    <p>
        @Html.RadioButton("RbDeleteGroup", Model.UserRetirement)
        @UserAccountResources.UserRetirement
        @Html.HiddenFor(x => x.UserRetirement)   
    </p>
    <br />
    <p>
        @Html.RadioButton("RbDeleteGroup", Model.UserStatus)
        @UserAccountResources.UserStatus
        @Html.HiddenFor(x => x.UserStatus)   
    </p>
</div>

我用这条线在另一个视图中调用这个局部视图:

@Html.Partial("_DeleteUAInfos", Model.DeleteUAInfosGroup)

目前我检查了登录名是空还是空。

但现在我需要包括对单选按钮的检查。 示例:我想验证登录是否正确并且至少检查了一个 rb(并检索了值)。

换句话说:我想将单选按钮的检查与登录值的检查结合起来(在我的例子中,登录部分已经完成)。

那么你能帮我解决这个问题吗?

提前致谢!

Ars_n

【问题讨论】:

    标签: c# javascript asp.net-mvc radio-button validation


    【解决方案1】:

    你所做的只是创建一个非常长的布尔表达式,所以在验证你的登录的函数中添加

    if(!radio1&&!radio2...&&!radion)
    {
        ModelState.AddModelError("HTMLModelComponentYouWantToValidate", "ErrorMessage");
    }
    

    然后在继续之前添加

    if(ModelState.IsValid){...}
    else{ return View();}
    

    【讨论】:

    • 只要你有权限,记得点赞并批准它是否适合你。
    • 感谢您的回答。但我有几个问题:1)我的 rb 是字符串属性,那么我该怎么做呢? 2)如何在控制器中直接调用这些rb?
    • 因此,当您处理此问题时,您应该使用表单提交。对于其中的每一个,请使用:@Html.RadioButtonFor(m=>m.UserLeave, Wantedvalue)。当您选择收音机并提交表单时,您可以检查每个值中的值,如果它与想要的值匹配,那么 Boom!已经检查过了。
    【解决方案2】:

    最后我完全改变了做事的方式,使用枚举。 所以,我按照以下步骤操作:

    1) 在 ViewModel 中声明一个公共枚举(其中包含“UserLeave”、“UserTransfer”等)。

    2) 使用属性引用枚举(在 ViewModel 中):public MyEnum myEnum{ get; set; }

    3) 在视图中调用这个枚举:@Html.RadioButtonFor(m =&gt; m.myEnum, MyEnum.UserLeave); 对每个单选按钮重复此操作。

    4) 现在,我可以直接在我的 ViewModel 中执行检查(是否选中单选按钮)..

    所以我希望它能帮助遇到同样问题的人..

    问候,

    Ars_n

    【讨论】:

      猜你喜欢
      • 2012-07-12
      • 2015-09-01
      • 2012-12-01
      • 2016-02-15
      • 2016-03-01
      • 2014-09-01
      • 2011-04-02
      • 2011-10-18
      相关资源
      最近更新 更多