Javascript jquery ajax post请求的mvc服务器端验证
如何做到这一点 例如,在我的模型中Javascript jquery ajax post请求的mvc服务器端验证,javascript,jquery,ajax,asp.net-mvc,validation,Javascript,Jquery,Ajax,Asp.net Mvc,Validation,如何做到这一点 例如,在我的模型中 [Required] [DataType(DataType.EmailAddress)] [RegularExpression(@"[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}", ErrorMessage = "Incorrect email")] public string EmailTo { get; set; } 我目前测试的新控制器是 [HttpPost] public EmptyResult SendAgreeme
[Required]
[DataType(DataType.EmailAddress)]
[RegularExpression(@"[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}", ErrorMessage = "Incorrect email")]
public string EmailTo { get; set; }
我目前测试的新控制器是
[HttpPost]
public EmptyResult SendAgreementEmail(AgreementReportModel model)
{
bool t = ModelState.IsValid;
return new EmptyResult();
}
即使emailto为空,ModelState.IsValid也有效
和js函数
function SendEmailWithJquery(offerID, agreementOfferID, customerID) {
var emailTo = document.getElementById('txtEmailTo').value;
var emailSubject = document.getElementById('txtEmailSubject').value;
var emailBody = document.getElementById('txtEmailBody').value;
var sendData = {
OfferID: offerID,
AgreementOfferID: agreementOfferID,
CustomerID: customerID,
EmailTo: emailTo,
EmailSubject: emailSubject,
EmailBody: emailBody
};
$.ajax({
url: "/Agreement/SendAgreementEmail",
type: "POST",
data: JSON.stringify(sendData),
dataType: 'json',
contentType: 'application/json',
success: function (data, textStatus, jqXHR) {
},
error: function (jqXHR, textStatus, errorThrown) {
}
});
};
是否可以使用json对象和强类型视图验证控制器的服务器端验证?我使用了与您相同的代码,服务器端验证对我来说绝对有效。为了简单起见,我删除了所有属性,除了email属性,因为它导致了主要问题 模型-
public class AgreementReportModel
{
[Required]
[DataType(DataType.EmailAddress)]
[RegularExpression(@"[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}", ErrorMessage = "Incorrect email")]
public string EmailTo { get; set; }
}
控制器动作-
public class AgreementController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public EmptyResult SendAgreementEmail(AgreementReportModel model)
{
bool t = ModelState.IsValid;
return new EmptyResult();
}
}
索引视图-
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
function SendEmailWithJquery() {
var sendData = {
EmailTo: ''
};
$.ajax({
url: "/Agreement/SendAgreementEmail",
type: "POST",
data: JSON.stringify(sendData),
dataType: 'json',
contentType: 'application/json',
success: function (data, textStatus, jqXHR) {
},
error: function (jqXHR, textStatus, errorThrown) {
}
});
};
</script>
<input type="button" value="Click" onclick="SendEmailWithJquery()" />
当我开始发送EmailTo:'rami@gmail.com,我得到ModelState.IsValid为true
当我启动EmailTo:null或EmailTo:,我得到ModelState.IsValid为false
下一步要做什么:
检查其他数据类型,它们可能是罪魁祸首。
检查JavaScript输入检索document.getElementById,它可以为您提供空值。
检查可能导致问题的代码的其他部分,可能是操作过滤器等代码。
我使用了与您相同的代码,服务器端验证对我来说非常好。为了简单起见,我删除了所有属性,除了email属性,因为它导致了主要问题 模型-
public class AgreementReportModel
{
[Required]
[DataType(DataType.EmailAddress)]
[RegularExpression(@"[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}", ErrorMessage = "Incorrect email")]
public string EmailTo { get; set; }
}
控制器动作-
public class AgreementController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public EmptyResult SendAgreementEmail(AgreementReportModel model)
{
bool t = ModelState.IsValid;
return new EmptyResult();
}
}
索引视图-
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
function SendEmailWithJquery() {
var sendData = {
EmailTo: ''
};
$.ajax({
url: "/Agreement/SendAgreementEmail",
type: "POST",
data: JSON.stringify(sendData),
dataType: 'json',
contentType: 'application/json',
success: function (data, textStatus, jqXHR) {
},
error: function (jqXHR, textStatus, errorThrown) {
}
});
};
</script>
<input type="button" value="Click" onclick="SendEmailWithJquery()" />
当我开始发送EmailTo:'rami@gmail.com,我得到ModelState.IsValid为true
当我启动EmailTo:null或EmailTo:,我得到ModelState.IsValid为false
下一步要做什么:
检查其他数据类型,它们可能是罪魁祸首。
检查JavaScript输入检索document.getElementById,它可以为您提供空值。
检查可能导致问题的代码的其他部分,可能是操作过滤器等代码。
为什么要在服务器端进行验证,验证电子邮件id需要什么,我想可能是在客户端本身使用正则表达式。因为服务器验证只为一个简单的验证创建了大量的开销。当然你是对的。但我想处理用户在浏览器中关闭脚本的情况。所以我想在这里仔细检查[HttpPost]公共字符串SendAgreementEmailstring jsonOfLog{//perform validation return Convert.ToStringjsonOfLog;},像这样尝试,在函数中执行验证,并返回相应的消息或错误代码是ModelState.IsValid是否为真,即使电子邮件为空?你用断点调试过吗?我无法在我这方面复制这种情况。我有你的密码,谢谢。我想这样做,除非mvc无法在我的情况下自动进行验证,为什么要在服务器端进行验证,验证电子邮件id需要什么,我想可能是在客户端本身使用正则表达式。因为服务器验证只为一个简单的验证创建了大量的开销。当然你是对的。但我想处理用户在浏览器中关闭脚本的情况。所以我想在这里仔细检查[HttpPost]公共字符串SendAgreementEmailstring jsonOfLog{//perform validation return Convert.ToStringjsonOfLog;},像这样尝试,在函数中执行验证,并返回相应的消息或错误代码是ModelState.IsValid是否为真,即使电子邮件为空?你用断点调试过吗?我无法在我这方面复制这种情况。我有你的密码,谢谢。我想这样做,除非mvc在我的情况下无法自动完成