【问题标题】:Either or Validation in Razor MVC3Razor MVC3 中的要么或验证
【发布时间】:2012-09-20 14:26:31
【问题描述】:

我有一个带有几个文本框的剃刀视图。

我想这样做,以便您选择一个文本框或其他 3 个文本框,除非您在其中至少一个选项中输入文本,否则您无法提交... IE 你可以输入一个社会安全号码,或者你可以输入一个人的名字、姓氏和出生日期。对于最后一个选项,您必须输入名字、姓氏和出生日期。这可能使用不显眼的验证吗? 以下是我的parial

<div id="searchByDemographicsDiv"style="float: left;width: 50%; display:inline; ">
            @*@using(Html.BeginForm("SearchByDemographic", "SearchPatients",FormMethod.Post, new{ id = "searchByDemographics"})){*@
            @using (Ajax.BeginForm("SearchByDemographic", "SearchPatients", null, new AjaxOptions { HttpMethod = "POST", LoadingElementId = Url.Content("~/Images/ajax-loader.gif"), OnSuccess = "binddata", OnFailure = "FailAlert" }, new { id = "searchByDemographics" })){ 
          <ul>
                      <li>@Html.Label("SSN", new { @for = "SSN" })  <br />@Html.TextBox("SSN", null, new { id = "SSN", name = "SSN", @class = "SSN" })</li>
          </ul>
          <ul>
          <p>Or</p>
          </ul>
          <ul>
            <li>@Html.Label("FirstName", new { @for = "FirstName" }) <br />@Html.TextBox("FirstName", null, new { id = "FirstName", @class = "demoGrphcs", name = "FirstName" })</li>
            <li>@Html.Label("LastName", new { @for = "LastName" }) <br />@Html.TextBox("LastName", null, new { id = "LastName", @class = "demoGrphcs", name = "LastName" })</li>
            <li>@Html.Label("dateOfBirth", new { @for = "dateOfBirth" }) <br />@Html.TextBox("dateOfBirth", null, new { id = "dateOfBirth", @class = "demoGrphcs", name = "dateOfBirth" })</li>
            <li>@Html.Label("Address1", new { @for = "Address1" }) <br />@Html.TextBox("Address1", null, new { id = "Address1" })</li>
            <li>@Html.Label("Address2", new { @for = "Address2" }) <br />@Html.TextBox("Address2", null, new { id = "Address2" })</li>
            <li>@Html.Label("City", new { @for = "City" }) <br />@Html.TextBox("City", null, new { id = "City" })</li>
            <li>@Html.Label("State", new { @for = "State" }) <br />@Html.TextBox("State", null, new { id = "State" })</li>
            <li>@Html.Label("Country", new { @for = "Country" }) <br />@Html.TextBox("Country", null, new { id = "Country" })</li>
            <li>@Html.Label("PostCode", new { @for = "PostCode" }) <br />@Html.TextBox("PostCode", null, new { id = "PostCode" })</li>
          </ul>  
        <input type="submit" value="Search By Demographics" class="button" id="submitDemo"/>     
            }
</div>

我基本上希望用户能够通过 SSN 或其他人口统计信息进行搜索,其中 firstName lastName 和 DateOfBirth 是必填字段。如果按 SSN 搜索,我希望它是必填字段。我知道很复杂。

已更新**我的表单元素的原始验证**更新

$("#searchByDemographics").validate({
    rules: {
        SSN: {
            require_from_group: [1, ".SSN"]
        },
        FirstName: {
            require_from_group: [1, ".demoGrphcs"]
        },
        LastName: {
            require_from_group: [1, ".demoGrphcs"]
        },
        DateOfBirth: {
            require_from_group: [1, ".demoGrphcs"]
        }
    },
    messages : {
        SSN: 'Please Enter either a valid SSN or Demographic Info below',
        FirstName: 'First name is required',
        LastName: 'Last name is required',
        DateOfBirth: 'Date of Birth is required'
    }
});

【问题讨论】:

    标签: validation asp.net-mvc-4 jquery-validate


    【解决方案1】:

    我认为简单的方法是从模型中传递所有这些值并在 POST 上检查它,根据您的要求进行验证。

    【讨论】:

      【解决方案2】:

      我不确定您为什么要在这种情况下进行不显眼的验证,因为验证非常具体。当您尝试完成的验证有点可重用但您的情况并非如此时,不显眼的验证非常有意义。

      我建议您在模型中实现IValidatableObject 以进行服务器端验证,并使用纯 jquery 进行客户端验证。

      【讨论】:

      • 我愿意按照您的建议去做。 IE 使用普通的旧 jquery 来执行验证。但我知道如何做到这一点?我可以只为那个字段做这件事,还是我必须打破对我拥有的所有字段的不显眼的验证?我这样做没有问题,因为我已经编写了所有客户端验证并准备就绪。我已经实现了 jquery,但它从未真正触发过。我完全不知所措。任何帮助都会很棒。
      • 这部分没有模型。我为其他视图做,但这个视图不是强类型的。
      • 我没有这些局部视图的模型。它们不是强类型。我只想使用 jquery 的原因之一......我还没有实现 jquery,但我有其他观点。因此,一旦我弄清楚是否有一种方法可以实现 jquery 验证调用,我就会这样做。
      • @DmainEvent 你说 我已经实现了 jquery,但它从未真正触发过。我完全不知所措。我认为代码可能有问题,所以请你分享!
      • 我应该稍微清楚一点。我有一个类似的旧项目,我正在尝试升级。验证在那里实现。但是,我尝试使用其他视图实现简单的 jQuery 验证,但这不起作用,因为您需要不显眼的 ajax 并在模型上放置所需的注释等等。我的问题是真的有办法将 jquery 验证放在视图上。我会将旧验证码放在我原来的帖子中
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多