我的项目中有一个类,如下所示:
public class MyClass
{
[Required]
public string keyword { get; set; }
public string saleRange { get; set; }
}
Action 是这样的:
[HttpPost]
[ActionName("Analyze")]
public ActionResult Analyze(MyClass obj)
{
if (!ModelState.IsValid)
{
return Json("error");
}
else
{
return Json("ok");
}
}
在 jQuery 中:
$(document).on("click",".btnAnalyze",function() {
var data =
{
keyword: $(".keywordInput").val(),
saleRange: "1"
};
console.log($(".keywordInput").val());
$.post("/Controller/Analyze",data).done(function(){
if (data == "error") {
alert("all fields are required");
}
});
});
如您所见,我正在将一个 JS 对象映射到一个传递给操作的 C# 类对象。现在这里的问题是,即使我没有为关键字属性提供任何东西(即它是 null 或“”),ModelState 仍将其属性 IsValid 显示为 true,但如果我不这样做,它应该设置为 false不要将任何内容作为关键字参数传递。
这是问题的第一部分,我在这里遇到的另一个问题是,如果我有 10 个文本框字段,其中所有字段都是必需的,我该怎么办。如果用户只输入其中的 1/10,我想为第一个下一个字段发送一条消息,用户必须验证才能继续,比如“需要 texbox #2,请输入一些东西”,而不是一般的消息比如“所有字段都是必需的”或类似的东西?
有人可以帮我解决这个问题吗?
为什么模型状态显示它是有效的,即使我没有在对象中提供关键字参数?
@T.Jung 这里是一个输入样本:
<input placeholder="Enter keywords" class="form-control keywordInput" type="text" style="width:80%">
它基本上只是一个简单的 html 输入字段..
最佳答案
您可以使用表单验证,它会在客户端执行数据注释验证,您不必去服务器端。
$('#btnAnalyze').on('click', function (evt) {
if ($('#YourformId').valid()) {
//Perform AJAX call
}
这样,如果任何验证不起作用,form.valid() 将抛出数据注释错误。因此,您可以将 Required 添加到模型中的这些字段,这将确保在验证失败时不会发送数据。
关于.NET MVC 5 中的 Javascript 对象绑定(bind)和服务器端验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44703070/