国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題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
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

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

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:35:22
文檔

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

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

前言

最近在學(xué)習(xí)Asp.net MVC Razor,在使用中遇到了不少的問題,所以想著總結(jié)下來,沒有經(jīng)驗(yàn)的童鞋就是這樣磕磕碰碰出來的經(jīng)驗(yàn)。話不多說,來一起看看詳細(xì)的介紹:

一、Datatype的錯(cuò)誤提示消息無法自定義

這也許是Asp.net MVC的一個(gè)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的錯(cuò)誤消息和定義的一樣,而DataType的消息卻沒有??既然DataType有自定義消息的公開屬性為啥不起作用?如果有知道的歡迎留言。

解決方法:

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

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

二、d-MMM-yy格式的英文日期在IE中驗(yàn)證出錯(cuò),而在Chrome中沒問題

Razor模型綁定設(shè)置如下:

@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測(cè)試情況:顯示日期不對(duì)的錯(cuò)誤消息。

Chrome測(cè)試情況:居然沒有錯(cuò)誤提示!!

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

官網(wǎng)(http://jqueryvalidation.org/date-method/)其實(shí)也有說明:

翻看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格式的驗(yàn)證。沒辦法只能重寫一個(gè)驗(yàn)證方法覆蓋原來的。

解決方法:

(function ($) {

 $.validator.methods.date = function (value, element) {

 return this.optional(element) || DateCheck(value);

 }

}(jQuery));

自定義一個(gè)DateCheck函數(shù)就可以了。

三、DropDownList設(shè)置默認(rèn)選擇項(xiàng)偶爾會(huì)無效

Action端設(shè)置:

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

View端設(shè)置:

@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" })

偶爾這樣的設(shè)置無法選擇Action中設(shè)置的選項(xiàng),如果有知道原因的歡迎留言。

解決方法:用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" })

四、密碼輸入自動(dòng)提示在Chrome中無法禁止

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

五、Disabled的控件值不上傳給服務(wù)器

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

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

由于HiddenFor默認(rèn)先使用ModelState的數(shù)據(jù),所以在ModelState驗(yàn)證失敗的情況下,重新加載畫面可能HiddenFor的控件數(shù)據(jù)是舊的。

解決方法:

ModelState.Clear();

七、List與Dictionary的數(shù)據(jù)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設(shè)置為viewmodelpropertyname[index].Key,Value設(shè)置為viewmodelpropertyname[index].Value

八、盡量多使用EditorFor

比如將第7點(diǎn)的DicTest使用EditorFor。首先需要在Shared或者Controller自身文件夾下創(chuàng)建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" })

}

調(diào)用頁面設(shè)置:

List的時(shí)候

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

Dictionary的時(shí)候

@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>

這樣就簡(jiǎn)化了不少,也到達(dá)了重用。

總結(jié)

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

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

Asp.net MVC中Razor常見的問題與解決方法總結(jié):前言 最近在學(xué)習(xí)Asp.net MVC Razor,在使用中遇到了不少的問題,所以想著總結(jié)下來,沒有經(jīng)驗(yàn)的童鞋就是這樣磕磕碰碰出來的經(jīng)驗(yàn)。話不多說,來一起看看詳細(xì)的介紹: 一、Datatype的錯(cuò)誤提示消息無法自定義 這也許是Asp.net MVC的一個(gè)Bug。ViewMo
推薦度:
標(biāo)簽: 解決 的問題 總結(jié)
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 欧美日韩精品乱国产538 | 国产黄色视屏 | 日本丶国产丶欧美色综合 | 欧美成人精品一区二区三区 | 精品一区二区三区四区五区六区 | 91精品国产91久久久久久 | 日本欧美韩国专区 | 久久久久久夜精品精品免费啦 | 日本a级精品一区二区三区 日本不卡视频一区二区三区 | 三男一女的伦交动态图 | 亚洲欧美日韩在线2020 | 97热久久免费频精品99国产成人 | 日韩欧美在线观看成人 | 毛片资源 | 欧美在线视频免费 | 欧美视频一区二区在线观看 | 亚州色图欧美色图 | 亚洲免费一区 | 久久91精品国产一区二区 | 日韩视频一区二区三区 | 国产日韩欧美在线观看不卡 | 天天色啪| 中文字幕无线码一区 | 欧美日韩专区 | 毛片综合 | 在线亚洲精品国产成人二区 | 亚洲欧美另类日韩 | 欧美国产在线视频 | 亚洲欧洲日本在线观看 | 亚洲精品免费在线 | 成人美女黄网站色大色费 | 国产精品国产精品国产专区不卡 | 国产中出| 久久精品国产免费中文 | 免费国产va在线观看视频 | 国内一区亚洲综合图区欧美 | 久久精品一区二区 | 欧美网址在线观看 | 精品欧美一区二区在线观看欧美熟 | 日韩视频高清 | 欧美色图中文字幕 |