MVC 5条件验证选项?

时间:2014-05-01 11:05:52

标签: jquery-validate asp.net-mvc-5 unobtrusive-validation fluentvalidation

我正在开发一个MVC 5 Web应用程序。在特定的视图中我需要验证ViewModel,但是,我需要进行一些验证,具体取决于用户inpupt。

例如,我有一个ViewModel

public class TimeEntryViewModel
{
    public int proposalID { get; set; }
    public int proposalCode { get; set; }
    public int nonchargeCode { get; set; }

    public SelectList UserProposals { get; set; }
    public SelectList TimeEntryClientCodes { get; set; }
    public SelectList TimeEntryNonChargeCodes { get; set; }
}

此ViewModel将传递给看起来像这样的

<div class="form-group">
    @Html.LabelFor(m => m.proposalID, "Proposal")
    @Html.DropDownListFor(m => m.proposalID, Model.UserProposals, "No Proposal", new { @class = "form-control"})
    @Html.ValidationMessageFor(m => m.proposalID)
</div>
<div id="ClientCodes" class="form-group" style="display:none">
    @Html.LabelFor(m => m.proposalCode, "Client")
    @Html.DropDownListFor(m => m.proposalCode, Model.TimeEntryClientCodes, "Select", new { @class = "form-control" })
    @Html.ValidationMessageFor(m => m.proposalCode)
</div>
<div id="NonChargeCodes" class="form-group">
    @Html.LabelFor(m => m.nonchargeCode, "Non Charge")
    @Html.DropDownListFor(m => m.nonchargeCode, Model.TimeEntryNonChargeCodes, "Select", new { @class = "form-control" })
    @Html.ValidationMessageFor(m => m.nonchargeCode)
</div>

如果用户从第一个下拉列表中选择“No Proposal”,则会出现下拉列表'nonchargeCode',我需要进行验证,以便用户从中选择一个选项。

但是,如果用户从第一个下拉列表中选择另一个选项,则下拉列表'nonchargeCode'将消失,并出现另一个名为'proposalCode'的下拉列表。然后我想验证以确保用户从此下拉列表中选择一个选项,但不是'nonchargeCode'(将被隐藏)。

在我之前编码的MVC 4应用程序中,我使用http://fluentvalidation.codeplex.com/来帮助解决这个问题。

我只是想知道是否还有其他人使用其他任何东西来克服条件验证的问题?如果是这样,我会很想听到。

再次感谢。

1 个答案:

答案 0 :(得分:3)

您可以在jQuery和fluentvalidation中使用条件验证。

你可以在验证上使用jQuery选择器,就像这样。 我不确定HTML元素名称。

  

$(“#myform”)。validate({rules:{       proposalCode:{         必需:“#proposalCode:visible”       }}

查看jQuery Dependency expression了解详情。

在FluentValidation验证(仅限服务器端)中,您可以使用'When'表达式。

  

RuleFor(r =&gt; r.proposalCode).NotNull()。当(e =&gt; //检查选定的值);

查看documentation here

我认为这应该让你开始。