<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Asp.net MVC中Razor常見的問題與解決方法總結

        來源:懂視網 責編:小采 時間:2020-11-27 22:35:22
        文檔

        Asp.net MVC中Razor常見的問題與解決方法總結

        Asp.net MVC中Razor常見的問題與解決方法總結:前言 最近在學習Asp.net MVC Razor,在使用中遇到了不少的問題,所以想著總結下來,沒有經驗的童鞋就是這樣磕磕碰碰出來的經驗。話不多說,來一起看看詳細的介紹: 一、Datatype的錯誤提示消息無法自定義 這也許是Asp.net MVC的一個Bug。ViewMo
        推薦度:
        導讀Asp.net MVC中Razor常見的問題與解決方法總結:前言 最近在學習Asp.net MVC Razor,在使用中遇到了不少的問題,所以想著總結下來,沒有經驗的童鞋就是這樣磕磕碰碰出來的經驗。話不多說,來一起看看詳細的介紹: 一、Datatype的錯誤提示消息無法自定義 這也許是Asp.net MVC的一個Bug。ViewMo

        前言

        最近在學習Asp.net MVC Razor,在使用中遇到了不少的問題,所以想著總結下來,沒有經驗的童鞋就是這樣磕磕碰碰出來的經驗。話不多說,來一起看看詳細的介紹:

        一、Datatype的錯誤提示消息無法自定義

        這也許是Asp.net MVC的一個Bug。ViewModel中定義了DataType為Date字段:

        [Required(ErrorMessage = "Birthday must be input!")]
        
        [DataType(DataType.Date, ErrorMessage = "Please enter a date like(2017-07-19).")]
        
        public DateTime BirthDay { get; set; } 

        Razor生成的HTML如下:

        <input name="BirthDay" class="form-control" id="BirthDay" type="text" value="" data-val-required="Birthday must be input!" data-val="true" data-val-date="字段 BirthDay 必須是日期。"> 

        Required的錯誤消息和定義的一樣,而DataType的消息卻沒有??既然DataType有自定義消息的公開屬性為啥不起作用?如果有知道的歡迎留言。

        解決方法:

        通過Javascript在頁面Load的時候替換掉原來的消息。

        $("#txtDesignatedDate").attr('data-val-date', 'Please enter a date like(2017/1/1)'); 
        

        二、d-MMM-yy格式的英文日期在IE中驗證出錯,而在Chrome中沒問題

        Razor模型綁定設置如下:

        @Html.LabelFor(m => m.BirthDay, new { @class = "col-md-2 control-label" }) 
        @Html.TextBoxFor(m => m.BirthDay, "{0:d-MMM-yy}", new { @class = "form-control" })

        Edge測試情況:顯示日期不對的錯誤消息。

        Chrome測試情況:居然沒有錯誤提示!!

        如果是英文以外同樣格式的日期,都會顯示日期不對錯誤消息。這到底怎么回事?

        官網(http://jqueryvalidation.org/date-method/)其實也有說明:

        翻看JS代碼:

         // http://docs.jquery.com/Plugins/Validation/Methods/date
        
        date: function( value, element ) {
        
         return this.optional(element) || !/Invalid|NaN/.test(new Date(value).toString());
        
        },
        
         
        
        // http://docs.jquery.com/Plugins/Validation/Methods/dateISO
        
        dateISO: function( value, element ) {
        
         return this.optional(element) || /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(value);
        
        }, 

        dateISO也只支持yyyy-MM-dd 或者yyyy/MM/dd格式的驗證。沒辦法只能重寫一個驗證方法覆蓋原來的。

        解決方法:

        (function ($) {
        
         $.validator.methods.date = function (value, element) {
        
         return this.optional(element) || DateCheck(value);
        
         }
        
        }(jQuery));

        自定義一個DateCheck函數就可以了。

        三、DropDownList設置默認選擇項偶爾會無效

        Action端設置:

        return View(new RegisterViewModel { BirthDay = DateTime.Now, BirthCity = City.Shanghai });

        View端設置:

        @Html.DropDownListFor(m => m.BirthCity, new SelectListItem[] {
        
         new SelectListItem{ Text="Jiangxi",Value="1"},
        
         new SelectListItem{ Text="Beijing",Value="2"},
        
         new SelectListItem{ Text="Shanghai",Value="3"},
        
         new SelectListItem{ Text="ShengZhen",Value="4"},
        
        }, new { @class = "form-control" })

        偶爾這樣的設置無法選擇Action中設置的選項,如果有知道原因的歡迎留言。

        解決方法:用SelectList替代SelectItem列表。

        @Html.DropDownListFor(m => m.BirthCity, new SelectList(new SelectListItem[] {
        
         new SelectListItem{ Text="Jiangxi",Value="1"},
        
         new SelectListItem{ Text="Beijing",Value="2"},
        
         new SelectListItem{ Text="Shanghai",Value="3"},
        
         new SelectListItem{ Text="ShengZhen",Value="4"},
        
        }, "Value", "Text", Model.BirthCity), new { @class = "form-control" })

        四、密碼輸入自動提示在Chrome中無法禁止

        autocomplete = "off"在Chrome58以后都無效了。這個是瀏覽器的問題沒辦法了。

        五、Disabled的控件值不上傳給服務器

        解決方法:通過Javascript在submit之前將控件的Disabled屬性刪除,submit完成之后再復原Disabled屬性。

        六、Html.HiddenFor()的控件值不更新

        由于HiddenFor默認先使用ModelState的數據,所以在ModelState驗證失敗的情況下,重新加載畫面可能HiddenFor的控件數據是舊的。

        解決方法:

        ModelState.Clear();

        七、List與Dictionary的數據Razor如何綁定

        ViewModel屬性:

        public List ListTest { get; set; }
        
        public Dictionary> DicTest { get; set; }

        View端綁定:

        @for (int i = 0; i < Model.ListTest.Count; i++)
        
        {
        
         @Html.TextBoxFor(m => m.ListTest[i].Name, new { @class = "form-control" })
        
         @Html.TextBoxFor(m => m.ListTest[i].Phone, new { @class = "form-control" })
        
        }
        @for (int i = 0; i < Model.DicTest.Count; i++)
        
        {
        
         string key = Model.DicTest.Keys.ElementAt(i);
        
         < input type="hidden" name="DicTest[@i].Key" value="@key" />
        
         for (int j = 0; j < Model.DicTest[key].Count; j++)
        
         {
        
         @Html.TextBox($"DicTest[{i}].Value[{j}].Name", Model.DicTest[key][j].Name, new { @class = "form-control" })
        
         @Html.TextBox($"DicTest[{i}].Value[{j}].Phone", Model.DicTest[key][j].Phone, new { @class = "form-control" })
        
         }
        
        }

        生成的Html如下:

        <input name="ListTest[0].Name" class="form-control" id="ListTest_0__Name" type="text" value="lxb1">
        
        <input name="ListTest[0].Phone" class="form-control" id="ListTest_0__Phone" type="text" value="123">
        
        <input name="ListTest[1].Name" class="form-control" id="ListTest_1__Name" type="text" value="lxb2">
        
        <input name="ListTest[1].Phone" class="form-control" id="ListTest_1__Phone" type="text" value="1234">
        
        <input name="ListTest[2].Name" class="form-control" id="ListTest_2__Name" type="text" value="lxb3">
        
        <input name="ListTest[2].Phone" class="form-control" id="ListTest_2__Phone" type="text" value="12345">
        <input name="DicTest[0].Key" type="hidden" value="JX">
        
        <input name="DicTest[0].Value[0].Name" class="form-control" id="DicTest_0__Value_0__Name" type="text" value="lxb1">
        
        <input name="DicTest[0].Value[0].Phone" class="form-control" id="DicTest_0__Value_0__Phone" type="text" value="123">
        
        <input name="DicTest[0].Value[1].Name" class="form-control" id="DicTest_0__Value_1__Name" type="text" value="lxb2">
        
        <input name="DicTest[0].Value[1].Phone" class="form-control" id="DicTest_0__Value_1__Phone" type="text" value="1234"> 
        
        <input name="DicTest[1].Key" type="hidden" value="SZ">
        
        <input name="DicTest[1].Value[0].Name" class="form-control" id="DicTest_1__Value_0__Name" type="text" value="lxb3">
        
        <input name="DicTest[1].Value[0].Phone" class="form-control" id="DicTest_1__Value_0__Phone" type="text" value="12345">
        
        <input name="DicTest[1].Value[1].Name" class="form-control" id="DicTest_1__Value_1__Name" type="text" value="lxb4">
        
        <input id="DicTest_1__Value_1__Phone" class="form-control" value="123456" name="DicTest[1].Value[1].Phone">

        其中控件的name很重要。

        List: viewmodelpropertyname[index].modelpropertyname 格式。

        Dictionary:key設置為viewmodelpropertyname[index].Key,Value設置為viewmodelpropertyname[index].Value

        八、盡量多使用EditorFor

        比如將第7點的DicTest使用EditorFor。首先需要在Shared或者Controller自身文件夾下創建EditorTemplates文件夾,然后在EditorTemplates文件夾中添加分部頁。代碼如下:

        @using MVCDemo.Models;
        
         
        
        @model List
        
         
        
        @for (int i = 0; i < Model.Count; i++)
        
        {
        
         @Html.TextBoxFor(m => m[i].Name, new { @class = "form-control" })
        
         @Html.TextBoxFor(m => m[i].Phone, new { @class = "form-control" })
        
        }

        調用頁面設置:

        List的時候

        @Html.EditorFor(m => m.ListTest, "_PartialPerson", $"ListTest")

        Dictionary的時候

        @for (int i = 0; i < Model.DicTest.Count; i++)
        
        {
        
         string key = Model.DicTest.Keys.ElementAt(i);
        
         <input type="hidden" name="DicTest[@i].Key" value="@key" />
        
         @Html.EditorFor(m => m.DicTest[key], "_PartialPerson", $"DicTest[{i}].Value")
        
        }

        生成的HTML:

        <div class="col-md-10"> 
        
        <input name="ListTest[0].Name" class="form-control" id="ListTest_0__Name" type="text" value="lxb1">
        
        <input name="ListTest[0].Phone" class="form-control" id="ListTest_0__Phone" type="text" value="123">
        
        <input name="ListTest[1].Name" class="form-control" id="ListTest_1__Name" type="text" value="lxb2">
        
        <input name="ListTest[1].Phone" class="form-control" id="ListTest_1__Phone" type="text" value="1234">
        
        <input name="ListTest[2].Name" class="form-control" id="ListTest_2__Name" type="text" value="lxb3">
        
        <input name="ListTest[2].Phone" class="form-control" id="ListTest_2__Phone" type="text" value="12345">
        
        </div>
        <div class="col-md-10"> 
        
        <input name="DicTest[0].Key" type="hidden" value="JX">
        
        <input name="DicTest[0].Value[0].Name" class="form-control" id="DicTest_0__Value_0__Name" type="text" value="lxb1">
        
        <input name="DicTest[0].Value[0].Phone" class="form-control" id="DicTest_0__Value_0__Phone" type="text" value="123">
        
        <input name="DicTest[0].Value[1].Name" class="form-control" id="DicTest_0__Value_1__Name" type="text" value="lxb2">
        
        <input name="DicTest[0].Value[1].Phone" class="form-control" id="DicTest_0__Value_1__Phone" type="text" value="1234"> 
        
        <input name="DicTest[1].Key" type="hidden" value="SZ">
        
        <input name="DicTest[1].Value[0].Name" class="form-control" id="DicTest_1__Value_0__Name" type="text" value="lxb3">
        
        <input name="DicTest[1].Value[0].Phone" class="form-control" id="DicTest_1__Value_0__Phone" type="text" value="12345">
        
        <input name="DicTest[1].Value[1].Name" class="form-control" id="DicTest_1__Value_1__Name" type="text" value="lxb4">
        
        <input name="DicTest[1].Value[1].Phone" class="form-control" id="DicTest_1__Value_1__Phone" type="text" value="123456"> 
        
        </div>

        這樣就簡化了不少,也到達了重用。

        總結

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Asp.net MVC中Razor常見的問題與解決方法總結

        Asp.net MVC中Razor常見的問題與解決方法總結:前言 最近在學習Asp.net MVC Razor,在使用中遇到了不少的問題,所以想著總結下來,沒有經驗的童鞋就是這樣磕磕碰碰出來的經驗。話不多說,來一起看看詳細的介紹: 一、Datatype的錯誤提示消息無法自定義 這也許是Asp.net MVC的一個Bug。ViewMo
        推薦度:
        標簽: 解決 的問題 總結
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲avav天堂av在线不卡| 亚洲AV无码一区二区三区国产 | 免费手机在线看片| 全免费a级毛片免费看不卡| 亚洲中文字幕日本无线码| 69天堂人成无码麻豆免费视频| 亚洲理论片在线中文字幕| www视频在线观看免费| 亚洲香蕉久久一区二区| 免费观看的毛片手机视频| 国产成人久久精品亚洲小说| 亚洲av麻豆aⅴ无码电影 | 国产偷伦视频免费观看| 噜噜噜亚洲色成人网站∨| 亚洲人成电影网站免费| 337P日本欧洲亚洲大胆精品| 亚洲国产成人精品久久久国产成人一区二区三区综 | 日韩视频在线免费观看| 国产成人不卡亚洲精品91| 国产亚洲精品福利在线无卡一 | 亚洲国产成人久久笫一页| 中文字幕av无码不卡免费| 亚洲人成在线影院| 女人被免费视频网站| 一区二区三区免费在线观看| 午夜亚洲国产理论秋霞| 一二三四影视在线看片免费 | 最刺激黄a大片免费网站| 亚洲人色大成年网站在线观看| 国产精品国产午夜免费福利看| 国产三级在线免费观看| 亚洲欧洲日产韩国在线| 国产人妖ts在线观看免费视频| 最近更新免费中文字幕大全| 亚洲va成无码人在线观看| 最新亚洲成av人免费看| 手机看黄av免费网址| igao激情在线视频免费| 亚洲同性男gay网站在线观看| 亚洲国产精品一区二区九九| 精品一区二区三区免费毛片爱|