Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery ajax post请求的mvc服务器端验证_Javascript_Jquery_Ajax_Asp.net Mvc_Validation - Fatal编程技术网

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在我的情况下无法自动完成