在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開發中的碰到的常見問題了,如果大家有更多資料可在下面評論提供。