C# 从服务器端验证在ASP.NETMVC中显示成功验证消息

C# 从服务器端验证在ASP.NETMVC中显示成功验证消息,c#,jquery,asp.net-mvc,jquery-validate,unobtrusive-validation,C#,Jquery,Asp.net Mvc,Jquery Validate,Unobtrusive Validation,如果我的服务器端验证通过,我希望显示一条从服务器传回客户端的消息。可能出现错误消息(定义为ASP.Net MVC中属性的属性),我可以显示成功消息吗?也许我可以点击JQuery验证插件来做这件事 例如,我从位置进行查找,以获得我希望以字符串形式传回的城市,并将其显示为验证成功消息 这是我的密码 [Required()] [MaxLength(5)] [MinLength(5, ErrorMessage = "Can't find location")] [Disp

如果我的服务器端验证通过,我希望显示一条从服务器传回客户端的消息。可能出现错误消息(定义为ASP.Net MVC中属性的属性),我可以显示成功消息吗?也许我可以点击JQuery验证插件来做这件事

例如,我从位置进行查找,以获得我希望以字符串形式传回的城市,并将其显示为验证成功消息

这是我的密码

    [Required()]
    [MaxLength(5)]
    [MinLength(5, ErrorMessage = "Can't find location")]
    [Display(Name = "Zip code")]
    [Remote("CheckLocation", "Account", AreaReference.UseCurrent, ErrorMessage = "Invalid zipcode")]
    public string Location { get; set; }


    [HttpGet]
    [AllowAnonymous]
    public JsonResult CheckLocation(int Location)
    {
        var city = getLocation(Location);
        if (city != null)
        {
            // pass the city back with the JSon object, but how do I display it???
            return Json(true, JsonRequestBehavior.AllowGet);
        }
        return Json(false, JsonRequestBehavior.AllowGet);
    }
编辑以下是我尝试的内容。我现在在
c
属性上使用jQuery验证,而不是远程属性。这很好,但是如何在remote中定义success属性并将该成功消息传递给验证消息?然后把颜色改成绿色而不是红色

$(“#位置”)。规则(“添加”{
要求:正确,
最小长度:5,
最大长度:5,
信息:{
必需:“必需输入”,
minlength:jQuery.validator.format(“请注意,{0}个字符是必需的”),
maxlength:jQuery.validator.format(“请注意,{0}个字符是必需的”)
},
远程:{
url:“检查位置”,
类型:“post”,
数据:{
位置:函数(){
返回$('#Location').val();
}
}
}
});
编辑2 我真的想显示来自服务器的success消息(例如,当输入zip时搜索城市),因此我想我可以在远程调用上使用success回调,并在回调中操纵消息颜色,使元素有效。我想如果JSon响应中有字符串,validate会将其设置为false吗

像这样的

        [HttpGet]
    [AllowAnonymous]
    public JsonResult CheckLocation(int Location)
    {
        var city = getLocation(Location);
        if (city != null)
        {
            return Json(city); // this will be text like "London"
        }
        return Json(false);
    }
$(“#位置”)。规则(“添加”{
要求:正确,
//最小长度:5,
最大长度:5,
信息:{
必需:“必需输入”,
minlength:jQuery.validator.format(“请注意,{0}个字符是必需的”),
maxlength:jQuery.validator.format(“请注意,{0}个字符是必需的”)
},
远程:{
url:“检查位置”,
类型:“post”,
数据:{
位置:函数(){
返回$('#Location').val();
}
},
成功:功能(数据){
//将消息的颜色从红色更改为绿色
//使无效元素有效,使其通过提交
}
}
});
.validate()
方法的
用于在验证通过时控制消息元素。默认情况下,验证通过时会隐藏错误消息。使用
success
时,您可以修改此行为,并在验证通过时显示图标、消息等。但是,此选项不会从服务器检索邮件

jQueryValidate是客户端代码,只有一个内置方法将从服务器获取响应,这就是方法。但是,这里的问题是,只有通过
true
才能通过验证,通过
false
才能失败验证。。。如果您传递一个字符串,它将转换为错误消息,验证将失败

好吧,没有内置的方法来做你想做的事情。也许您可以编写一个自定义的
success
函数,使用
.ajax()
从服务器检索消息


摘要

  • 插件通常不会在成功时显示消息。
    success
    选项是一种强制显示消息的方法。但是,问题是无法将值传递到此选项中。这只是在字段有效时控制错误消息对象的一种方法

  • 除了
    remote
    方法外,插件通常不与服务器通信。问题在于,只有通过
    true
    才能通过验证。如果传递字符串,验证将失败(该字符串将成为验证错误消息)


  • 编辑以响应OP:

    但是我如何在remote中定义一个success属性并将该成功消息传递给验证消息呢

    您只能使用来正确操作错误元素。但是,我认为您无法实现所述目标,因为似乎没有办法将字段的值传递到
    success
    选项中。否则,您可以在
    success
    中使用
    .ajax()

    然后把颜色改成绿色而不是红色

    这是通过为
    valid
    error
    类定义CSS属性自动完成的。您还可以在
    success
    选项中使用
    .addClass()
    应用自定义类

    IMO,使用jQuery验证插件无法实现您的全部目标。但是,您应该彻底检查以确定自己。


    我想如果JSon响应中有字符串,validate会将其设置为false吗


    是的,正如我在回答中所说的那样。如果服务器响应不是
    true
    ,验证将设置为失败。

    您可以做的是

    使用ajax调用自定义操作方法,而不是远程数据注释

        var url = "/MyController/CheckLocation/";
    
    $.ajax({
        url: url,
        data: { zipcode: _zipcode },
        cache: false,
        type: "POST",
        dataType: "json"
    }).done(function (obgcity) {
    
         //If objcity is null then display error else display city
        }
    });
    

    我希望下面的代码能帮助你

    public ActionResult CheckLocation(int Location)
        {
            var city = getLocation(Location);
            if (city != null)
            {
                // city is string type, example: string city="Mumbai";
                return Json(new {Status=true, City = city}, JsonRequestBehavior.AllowGet);
            }
            return Json(new { Status=false, City=""}, JsonRequestBehavior.AllowGet);
        }
    
    现在,正如Sparky在上面的消息中提到的,使用ajax调用您的操作或方法,并编写一个自定义的成功函数

     var locationId = 20;
     $.ajax({
        url: "MyController/CheckLocation",
        data: { Location: locationId},
        cache: false,
        type: "GET",
        dataType: "json",
        success: function (data) {
                 if(data.Status == true)
                 {
                     alert(data.City); 
                    // instead of alert you can create custom message alert box,
                    // or if you want to display city name or whatever message
                    // you can try $("#cityId").Html("<p>this is city</p>");   
                 }        
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert("Ajax Failed!!!");
         }
    });
    
    var locationId=20;
    $.ajax({
    url:“MyController/CheckLocation”,
    数据:{Location:locationId},
    cache:false,
    键入:“获取”,
    数据类型:“json”,
    成功:功能(数据){
    如果(data.Status==true)
    {
    警报(数据城市);
    //您可以创建自定义消息警报框,而不是警报,
    //或者如果你想显示城市名称或任何信息
    //你可以试试$(“#cityId”).Html(“这是城市”

    ”; } }, 错误:函数(xhr,aj