不要验证隐藏字段(jQuery)

时间:2019-09-18 16:12:07

标签: c# jquery model-view-controller unobtrusive-validation

我有一个包含select元素的表单,如果选择了“其他”选项,则会下拉textarea并询问其他信息。

除非[{1}}选项不是“其他”,否则我希望此textarea是必需的。

我该怎么做?

JavaScript (将表单提交给控制器)​​

select

C#(检查模型数据)

控制器:

var submitAnimatedForm = function (formHold, controllerURL, successMessage) {
    if (formHold.length) {
        var _form = formHold.find("form");

        _form.on("submit", function (e) {
            e.preventDefault();

            // Disables submit button on click
            $(':input[type=submit]').prop('disabled', true);

            // If the form is valid, post AJAX.
            if (_form.valid()) {
                setTimeout(function () {
                    $.ajax({
                        type: 'POST',
                        url: '/Umbraco/Surface/Contact/SubmitQuote',
                        data: _form.serialize(),
                        dataType: 'json',
                        encode: true,
                        success: function (data) {

                            if (!data.success) {
                                alert("ERR"); // - This is what I keep getting back
                            } else {
                                alert("SUCCESS");
                            }

                        },
                        error: function (data) {
                            console.log("ERR");
                        }
                    });
                }, 2000);
            }
        });
    }
};

模型

if (!ModelState.IsValid)
{
    return Json (
        new
        {
            success = false,
            message = "Sorry, we encountered an error."
        }
    );
}

return Json (
    new
    {
        success = true,
        message = "Thank you, your request has been sent!"
    }
);

我认为这与我的C#代码有关,我相信我可以像这样进行修复:

public class ServiceModel
{
    [Required(ErrorMessage = "Your first name is required")]
    public String Firstname { get; set; }

    [Required(ErrorMessage = "Your last name is required")]
    public String Lastname { get; set; }

    [Required(ErrorMessage = "Your e-mail address is required")]
    [DataType(DataType.EmailAddress)]
    public String Email { get; set; }

    [Required(ErrorMessage = "Your job location is required")]
    public String Location { get; set; }

    [Required(ErrorMessage = "This field is required")]
    public String Service { get; set; }

    [Required(ErrorMessage = "Your job description is required")]
    public String Description { get; set; }

    public String EstimatedCost { get; set; }
}

但是问题在于,它没有检查模型的其余部分,而只是检查服务描述。

任何帮助将不胜感激! :)

谢谢

2 个答案:

答案 0 :(得分:1)

在这种情况下,我有两个建议可以解决:

  1. 实现一个自定义jQuery验证器,以根据选择元素的值来验证您的textarea。

对于这种方法,请查看jQuery文档中的validator.addMethodexample here


  1. 另一种方法是将onChange函数添加到select元素,并根据值设置所需的文本区域

对于这种方法,请检查this answer以检查如何添加onChange函数,并检查this answer以检查如何根据需要设置元素。


更新

好的,第二遍阅读您的问题后,我相信您也希望在服务器端验证您的表单。为此,您可以创建一个自定义验证方法,并使用该方法装饰属性,例如in this answer

答案 1 :(得分:1)

您可以创建自己的验证属性,以放置在模型的“描述”属性顶部。

您可以了解有关创建自己的验证属性here的信息。

在自定义验证属性类的IsValid方法中,您可以实现逻辑来确定验证成功的条件,这与您在示例中提到的类似。