最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET?MVC遍歷驗(yàn)證ModelState的錯(cuò)誤信息

 更新時(shí)間:2022年09月26日 08:36:55   作者:Darren?Ji  
這篇文章介紹了ASP.NET?MVC遍歷ModelState錯(cuò)誤信息的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

在ASP.NET MVC中,ModelState中包含了驗(yàn)證失敗的錯(cuò)誤信息,具體被存儲(chǔ)在ModelState.Values[i].Errors[j].ErrorMessage屬性中。當(dāng)然,通過打斷點(diǎn),單步調(diào)試可以查看具體的驗(yàn)證失敗錯(cuò)誤信息,但有時(shí)候希望把ModelState中的驗(yàn)證失敗信息遍歷顯示出來。

ModelState類型是ModelStateDictionary,ModelStateDictionary是一個(gè)字典集合,鍵是模型的各個(gè)屬性,值是模型各個(gè)屬性對(duì)應(yīng)的ModelState。

ModelState的Errors屬性存儲(chǔ)了所有驗(yàn)證失敗信息,是一個(gè)ModelErrorCollection類型,ModelErrorCollection是一個(gè)ModelError的集合,而ModelError的ErrorMessage屬性包含了驗(yàn)證失敗錯(cuò)誤信息。

大致是這樣:

  • ModelStateDictionary實(shí)際上是IDictionary<string, ModelState>類型
  • ModelState.Errors屬性實(shí)際上是ModelErrorCollection類型
  • ModelErrorCollection實(shí)際上是ICollection<ModelError>類型
  • ModelError.ErrorMessage屬性存儲(chǔ)著所有驗(yàn)證失敗信息

如何把驗(yàn)證失敗信息顯示出來呢?

{"屬性1","屬性1驗(yàn)證失敗錯(cuò)誤信息1"},
{"屬性1","屬性1驗(yàn)證失敗錯(cuò)誤信息2"},
{"屬性2","屬性2驗(yàn)證失敗錯(cuò)誤信息1"}
......

想寫成如上的樣子,通過json讀取出來,在后臺(tái)遍歷,都可以。

那就先抽象出一個(gè)顯示錯(cuò)誤信息的模型。

    public class ShowError
    {
        public ShowError(string key, string message)
        {
            Key = key;
            Message = message;
        }
        public string Key { get; set; }
        public string Message { get; set; }
    }

由于ModelState是ModelStateDictionary類型,那就針對(duì)ModelStateDictionary類型寫一個(gè)擴(kuò)展方法。就是把ModelStateDictionary中的驗(yàn)證失敗信息連同對(duì)應(yīng)的屬性讀取出來,注入到ShowError這個(gè)模型中,并最終得到一個(gè)IEnumerable<ShowError>集合。

   public static class ModelStateExtensions
    {
        public static IEnumerable<ShowError> AllModelStateErrors(this ModelStateDictionary modelState)
        {
            var result = new List<ShowError>();
            //找到出錯(cuò)的字段以及出錯(cuò)信息
            var errorFieldsAndMsgs = modelState.Where(m => m.Value.Errors.Any())
                .Select(x => new {x.Key, x.Value.Errors});
            foreach (var item in errorFieldsAndMsgs)
            {
                //獲取鍵
                var fieldKey = item.Key;
                //獲取鍵對(duì)應(yīng)的錯(cuò)誤信息
                var fieldErrors = item.Errors
                    .Select(e => new ShowError(fieldKey, e.ErrorMessage));
                result.AddRange(fieldErrors);
            }
            return result;
        }
    }

再來一個(gè)最終用來測(cè)試驗(yàn)證失敗錯(cuò)誤信息的視圖模型。

   public class Student
    {
        public int Id { get; set; }
        [Required(ErrorMessage = "必填")]
        [StringLength(5, ErrorMessage = "長度1-5位")]
        public string Name { get; set; }
        [Required(ErrorMessage = "必填")]
        public int Age { get; set; }
        [Required(ErrorMessage = "必填")]
        [Range(typeof(Decimal), "0", "100", ErrorMessage = "{0} 必須是數(shù)字介于 {1} 和 {2}之間.")]
        public decimal Score { get; set; }
    }

在HomeController中,有一個(gè)Action用來呈現(xiàn)Student的強(qiáng)類型視圖頁,有一個(gè)Action用來把從ModelState中獲取到的所有屬性以及對(duì)應(yīng)的驗(yàn)證失敗信息以json格式返回給前臺(tái)視圖。

   public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View(new Student());
        }
        [HttpPost]
        public ActionResult GetErrors(Student student)
        {
            if (ModelState.IsValid)
            {
                return Content("沒有錯(cuò)誤信息~~");
            }
            Response.StatusCode = 400;
            Response.TrySkipIisCustomErrors = true;
            var modelErrors = ModelState.AllModelStateErrors();
            return Json(modelErrors);
        }
    }

在Home/Index.cshtml視圖中,當(dāng)點(diǎn)擊"提交"按鈕,在控制臺(tái)顯示驗(yàn)證失敗信息。

@model MvcApplication1.Models.Student
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
@using (Html.BeginForm("GetErrors", "Home", FormMethod.Post, new {id = "addForm"}))
{
    @Html.TextBoxFor(m => m.Name)
    <br />
    @Html.TextBoxFor(m => m.Age)
    <br />
    @Html.TextBoxFor(m => m.Score)
    <br />
    <input type="button" id="up" value="提交" />
}
@section scripts
{
    <script type="text/javascript">
        $(function () {
            $('#up').on('click', function () {
                $.post('@Url.Action("GetErrors")', $('#addForm').serialize()).fail(function(error) {
                    var response = JSON.parse(error.responseText);
                    for (var i = 0; i < response.length; i++) {
                        var e = response[i];
                        var fieldKey = e.Key;
                        var message = e.Message;
                        console.log(fieldKey + ': ' + message);
                    }
                });
              
            });
        });
    </script>
}

最終,在控制臺(tái)顯示驗(yàn)證失敗信息如下:

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • IIS7中ASP.net 請(qǐng)求處理過程說明

    IIS7中ASP.net 請(qǐng)求處理過程說明

    IIS7 站點(diǎn)啟動(dòng)并處理請(qǐng)求的步驟如下,在iis7中處理asp.net的朋友可以參考下。
    2011-02-02
  • 詳解ASP.NET Core 2.0 路由引擎之網(wǎng)址生成(譯)

    詳解ASP.NET Core 2.0 路由引擎之網(wǎng)址生成(譯)

    這篇文章主要介紹了詳解ASP.NET Core 2.0 路由引擎之網(wǎng)址生成(譯),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • .net core webapi通過中間件獲取請(qǐng)求和響應(yīng)內(nèi)容的方法

    .net core webapi通過中間件獲取請(qǐng)求和響應(yīng)內(nèi)容的方法

    這篇文章主要介紹了.net core webapi通過中間件獲取請(qǐng)求和響應(yīng)內(nèi)容的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 合并兩個(gè)DataSet的數(shù)據(jù)內(nèi)容的方法

    合并兩個(gè)DataSet的數(shù)據(jù)內(nèi)容的方法

    合并兩個(gè)DataSet的數(shù)據(jù)內(nèi)容的方法,需要的朋友可以參考一下
    2013-03-03
  • .Net彈性和瞬態(tài)故障處理庫Polly實(shí)現(xiàn)執(zhí)行策略

    .Net彈性和瞬態(tài)故障處理庫Polly實(shí)現(xiàn)執(zhí)行策略

    這篇文章介紹了.Net彈性和瞬態(tài)故障處理庫Polly實(shí)現(xiàn)執(zhí)行策略的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • asp.net HttpWebRequest自動(dòng)識(shí)別網(wǎng)頁編碼

    asp.net HttpWebRequest自動(dòng)識(shí)別網(wǎng)頁編碼

    HttpWebRequest獲取網(wǎng)頁源代碼時(shí)自動(dòng)識(shí)別網(wǎng)頁編碼,通過讀取頁面中的charset和讀取http頭中的編碼信息獲取頁面的編碼,基本可以正確獲取網(wǎng)頁編碼
    2008-09-09
  • 用ASP.NET做的個(gè)性化的郵件發(fā)送系統(tǒng)

    用ASP.NET做的個(gè)性化的郵件發(fā)送系統(tǒng)

    如果要你用ASP來做一個(gè)郵件發(fā)送系統(tǒng),你一定認(rèn)為這是一個(gè)比較復(fù)雜的工作。其實(shí)也的確是這樣。但當(dāng)他的后繼產(chǎn)品ASP.NET被推出以后,他的強(qiáng)大功能就使的這一切就變的相對(duì)簡單了。真的這樣神奇么?我們就通過ASP.NET做一個(gè)郵件發(fā)送系統(tǒng),看看到底有什么奧秘,是不是真的簡單。
    2008-02-02
  • 詳解ASP.NET Core3.0 配置的Options模式

    詳解ASP.NET Core3.0 配置的Options模式

    這篇文章主要介紹了詳解ASP.NET Core3.0 配置的Options模式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 基于nopCommerce的開發(fā)框架 附源碼

    基于nopCommerce的開發(fā)框架 附源碼

    這篇文章主要為大家詳細(xì)介紹了基于nopCommerce的開發(fā)框架,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • ASP.NET站點(diǎn)導(dǎo)航應(yīng)用詳解

    ASP.NET站點(diǎn)導(dǎo)航應(yīng)用詳解

    這篇文章主要內(nèi)容是ASP.NET站點(diǎn)導(dǎo)航,主要包括站點(diǎn)導(dǎo)航以及動(dòng)態(tài)修改內(nèi)存中的站點(diǎn)地圖,感興趣的小伙伴們可以參考一下
    2015-09-09

最新評(píng)論

舟曲县| 香港 | 大同市| 腾冲县| 和林格尔县| 甘德县| 如皋市| 奉节县| 兰坪| 鸡泽县| 黄平县| 和顺县| 桃园市| 忻州市| 南投市| 海原县| 广汉市| 额敏县| 河东区| 巴彦县| 新晃| 凤冈县| 嘉峪关市| 定边县| 珠海市| 崇阳县| 曲周县| 夹江县| 深圳市| 临西县| 湘潭市| 连城县| 隆昌县| 敖汉旗| 德令哈市| 富裕县| 淅川县| 彰化县| 湄潭县| 乡城县| 石柱|