在MVC中項目中使用JQuery,$.Post方法提交資料時產生中文亂碼現象?
解決方案:
在$.post時進行資料編碼,使用escape方法
$.post("@Url.Action("AddFriendLink" , "Setup")" ,{"Name" :escape(name)},function(data){
| 代碼如下 |
複製代碼 |
if(data>0){ alert( '添加成功!' ); window.location.reload(); } else{ alert( '添加失敗!' ); } }); |
在後台進行解碼,使用Server.UrlDecode方法。
| 代碼如下 |
複製代碼 |
public JsonResult Add(string Name) { DemoClass demoClass= newDemoClass { Name = Server.UrlDecode(Name) }; int result = demoService.Add(demoClass); return Json(result); } |
--------------------------------------------------------------------------------
2. MVC中如何設定文字框的寬度?
其實這個本不算是問題,不過剛開始還是寫錯了。
剛開始寫的是:
| 代碼如下 |
複製代碼 |
| @Html.TextBoxFor(model => model.Name, new { width="300px" }) (×) |
發現沒有效果。
實施了第二方案,搞定了。
| 代碼如下 |
複製代碼 |
| @Html.TextBoxFor(model => model.Name, new { @style = "width:300px" }) (√) |
--------------------------------------------------------------------------------
3.Html.RadioButtonFor怎麼使用呢?
像下面這樣就可以了。當Model.IsStudent=true時會自動選中第一項,以此類推。
| 代碼如下 |
複製代碼 |
@Html.RadioButtonFor(model=>model.IsStudent,true)是 @Html.RadioButtonFor(model => model.IsStudent, false)否 |
--------------------------------------------------------------------------------
4. @helper自訂方法
| 代碼如下 |
複製代碼 |
@helper GetStatusName(int status) { //code block } |
調用時直接使用@GetStatusName(2)即可。
--------------------------------------------------------------------------------
5.model多級引用時,對應的html?
| 代碼如下 |
複製代碼 |
| @ Html.TextBoxFor(model => model.Topic.Title) |
對應產生的HMTL代碼為:
| 代碼如下 |
複製代碼 |
| <input name="Topic.Title" class="ConInpon" id="Topic_Title" Onkeyup="getLen(this)" type="text"/> |
在寫指令碼的時候要注意了啊。
--------------------------------------------------------------------------------
6.DropDowlList控制項資料繫結的幾種常用方式?
①下拉框中的選項為幾個簡單的固定值。
| 代碼如下 |
複製代碼 |
@Html.DropDownList("ProvinceId", new SelectListItem[]{ new SelectListItem{ Text="選擇類別",Value="0", Selected=true}, new SelectListItem{Text="類別A",Value="1"}, new SelectListItem{Text="類別B",Value="2"} }) |
②將資料封裝為SelectList類型,並且放在ViewBag中進行傳遞。
controller層:
| 代碼如下 |
複製代碼 |
IList< Person> personList =personService.GetList(); ViewBag.personId= new SelectList(personList , "Id", "Name", queryParam.EditorId); |
View層:直接根據ID進行綁定就可以了。
@Html.DropDownList( "personId")
③如果頁面中的資料比較多,直接都放在viewbag中傳遞會比較亂,我們可以將頁面中需要的資料封裝成一個類,其中Select類型被封裝為一個屬性。
封裝類
| 代碼如下 |
複製代碼 |
public class IndexView { public SelectList PersonList{get;set;} … } controller: 對IndexView中的屬性賦初始值。 IList< Person> personList =personService.GetList(); IndexView indexView = new IndexView () { PersonList= new SelectList(personList , "Id", "Name", personList ) }; ViewBag.indexView = indexView; View: @ Html.DropDownListFor(x=>queryParam.PersonId,indexView.PersonList) |
--------------------------------------------------------------------------------
7.非同步提交表單時,要記得Ajax.BeginForm喲!
做表單提交時,繞的小彎子:
剛開始想用@Html.BeginForm()+MVC3驗證來實現,可是想非同步提示結果啊。
用Jquery中的.post方法提交,那就得把驗證加在用戶端指令碼了。
後來突然想起了老被我遺忘了的Ajax.BeginForm()方法。實現了我的需求。(*^__^*) 嘻嘻……
| 代碼如下 |
複製代碼 |
@ using (Ajax.BeginForm( "Index", "Manage" , new AjaxOptions { HttpMethod = "Post", OnSuccess = "Success", OnFailure = "Failure" })) { @Html.ValidationSummary(true) @ Html.TextBoxFor(model => model.Name, new { @style = "width:300px" }) @Html.ValidationMessageFor(model => model.Name) } ////指令碼提示執行結果 <script language="javascript" type ="text/javascript"> function Success() { alert( "修改成功" ); } function Failure() { alert( "修改失敗!" ); } </script> |
其中還可以設定 UpdateTargetId屬性,執行結果後用來顯示執行結果。
重要的一點是要添加
| 代碼如下 |
複製代碼 |
| <script src=" @Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js" )" type="text/javascript"></script > |
現在基本成功了。
疑問:
還有最後一個問題是產生了中文亂碼現象?用Html.BeginForm沒問題,用Ajax.BeginForm就會出現亂碼。(博問地址)
最後終於找到原因了:
view裡面和web.config裡的編碼有衝突了:
| 代碼如下 |
複製代碼 |
<script src=" @Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js" )" type="text/javascript"></script > web.config: <globalization fileEncoding=" gb2312" requestEncoding =" gb2312" responseEncoding=" gb2312" culture =" zh-CN" /> |
還希望各位大牛能夠慷慨的提供一種比較好的解決方案,這裡是測試專案
在這裡我總結我所瞭解的mvc開發中的碰到的常見問題了,如果大家有更多資料可在下面評論提供。