我有一个包含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; }
}
但是问题在于,它没有检查模型的其余部分,而只是检查服务描述。
任何帮助将不胜感激! :)
谢谢
答案 0 :(得分:1)
在这种情况下,我有两个建议可以解决:
对于这种方法,请查看jQuery文档中的validator.addMethod和example here
对于这种方法,请检查this answer以检查如何添加onChange函数,并检查this answer以检查如何根据需要设置元素。
好的,第二遍阅读您的问题后,我相信您也希望在服务器端验证您的表单。为此,您可以创建一个自定义验证方法,并使用该方法装饰属性,例如in this answer。
答案 1 :(得分:1)
您可以创建自己的验证属性,以放置在模型的“描述”属性顶部。
您可以了解有关创建自己的验证属性here的信息。
在自定义验证属性类的IsValid
方法中,您可以实现逻辑来确定验证成功的条件,这与您在示例中提到的类似。