【问题标题】:Make field not required based to dropdown list selection MVC 5根据下拉列表选择 MVC 5 使字段不需要
【发布时间】:2016-09-13 08:21:41
【问题描述】:

在我的 MVC 5 应用程序中,我有一个带有下拉列表和一些必填字段的表单。当下拉选择更改时,我需要更改字段的此属性。

我有这个枚举

public enum OrderKind
{

    Market,
    Research,

}

我从中填写下拉列表。我已经使用 javascript 来显示或隐藏有效的字段。

某事

 $(function () {

  $('#orderkind').change(function () {
            var value = $(this).val();
            if (value == "Market") {
                $(datefrom).hide();
                $(datefrom).hide();
                $("#fromDate").attr("required", false);
                $("#toDate").attr("required", false);
    else if (value == "Research") {
                $(datefrom).show();
                $(datefrom).show();
                $("#fromDate").attr("required", true);
                $("#toDate").attr("required", true);
                fromDate.setCustomValidity('Please Fill the date from field');
                toDate.setCustomValidity('Please Fill the date to field');
          }

但它使日期字段始终是必需的,即使它们已被填写,它也会显示消息。 有没有办法从控制器检查下拉列表值? 谢谢!

【问题讨论】:

  • 先修复语法错误,然后用.prop()代替.attr()
  • 考虑使用 foolproof [RequiredIf] 或类似的条件验证属性,以便您获得开箱即用的客户端和服务器端验证
  • Satpal,谢谢您的回复,我采纳了您的建议,但没有任何改变。它总是显示消息。
  • if 条件之前的 value 变量是什么?
  • @StephenMuecke,你好,我试过万无一失,但是当我提交表单时,我收到错误“对象引用未设置为对象的实例。”有什么想法吗?

标签: javascript asp.net-mvc


【解决方案1】:

我认为您必须将枚举更改为

public enum OrderKind
{
    Market = 1,
    Research = 2,
}

然后,将该值绑定到您的下拉列表中,并将add external (default) 值绑定到它。

【讨论】:

    【解决方案2】:

    为您的表单提供一个 ID,如下所示

    using (Html.BeginForm(null, null, FormMethod.Post, new { id = "formID" }))
       { }
    

    在 Jquery 中

    $("#formID").submit(function(e){
    //your checking
    //you can prevent form submission here like
    e.preventdefault()
    //and you can show validation error for dropdown list or show as alert
    });
    

    您可以在 Jquery 中设置验证错误,例如 this

    【讨论】:

    • 感谢您的回复。我添加了您的代码,但我的检查不起作用。我的意思是我必须根据下拉列表显示和隐藏我的一些字段。
    【解决方案3】:

    试试这个代码,希望对你有帮助

    $(function () {
    

    $('#orderkind').change(function () { var value = $(this).val(); if (value == "Market") { $(datefrom).hide(); $(datefrom).hide(); $("#fromDate").removeAttr('required'); $("#toDate").removeAttr('required'); else if (value == "Research") { $(datefrom).show(); $(datefrom).show(); $("#fromDate").attr('required', 'required'); $("#toDate").attr('required', 'required'); fromDate.setCustomValidity('Please Fill the date from field'); toDate.setCustomValidity('Please Fill the date to field'); } });

    【讨论】:

    • 我的代码有什么不同?括号?我已经有了它们。我只是没有做好粘贴。谢谢
    • $("#fromDate").removeAttr('required');这里改变。
    • 它不起作用,它总是询问日期。谢谢
    猜你喜欢
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多