Below you will find pages that utilize the taxonomy term “ASP.NET MVC”
Posts
ASP.NET MVC - MVC 5 on IIS 7
在 IIS 7 使用 ASP.NET MVC 5,Routing 功能會無法正常運作,會看到 403 或是 404 頁面。
這邊可以在 Web.Config 的 modules 這邊加上 runAllManagedModulesForAllRequests="true" 設定,並為網站加上 UrlRoutingModule-4.0 模組。
... <system.webServer> <modules runAllManagedModulesForAllRequests="true"> ... <remove name="UrlRoutingModule-4.0"></remove> <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition=""></add> </modules> ... 沒意外的話就會運作正常了。
Link MVC 5 on Windows Server 2008/IIS 7
read morePosts
ASP.NET MVC - Replacing MVC JavascriptSerializer with JSON.NET JsonSerializer
使用 ASP.NET MVC 或是 Web API 做 JSON 格式的回傳,只要將 Model 帶入去建構 JsonResult 物件回傳即可,像是下面這樣:
... return new JsonResult(model); ... 這樣的寫法預設會採用 JavaSriptSerializer 去做 JSON 的序列化,有著效能不佳的問題,且序列化出來的資料有時也不是我們所期望的,像是 DateTime 物件會被序列化成下面這樣:
"/Date(1290181373164)/" Json.Net 提供了 JsonNetResult 可解決這樣的問題,可將程式直接加到專案內使用。
/// <summary> /// Simple Json Result that implements the Json.NET serialiser offering more versatile serialisation /// </summary> public class JsonNetResult : ActionResult { public JsonNetResult() { } public JsonNetResult (object responseBody) { ResponseBody = responseBody; } public JsonNetResult(object responseBody, JsonSerializerSettings settings) { Settings = settings; } /// <summary>Gets or sets the serialiser settings</summary> public JsonSerializerSettings Settings { get; set; } /// <summary>Gets or sets the encoding of the response</summary> public Encoding ContentEncoding { get; set; } /// <summary>Gets or sets the content type for the response</summary> public string ContentType { get; set; } /// <summary>Gets or sets the body of the response</summary> public object ResponseBody { get; set; } /// <summary>Gets the formatting types depending on whether we are in debug mode</summary> private Formatting Formatting { get { return Debugger.
read morePosts
ASP.NET MVC - Post array data to MVC controller
最近在用 JQuery 傳送陣列資料給 MVC Controller,資料無法如預期般的被送過去。查看了一下送過去的資訊,看起來是送的資料格式不符合 Model Binder 預期的格式所導致。
以基本型別的陣列來說, Model Binder 預期的格式為
arrayName = arrayValue1& arrayName = arrayValue2 但是透過 JQuery 發送的資料卻是
arrayName[] = arrayValue1& arrayName[] = arrayValue2 而以物件陣列來說, Model Binder 預期的格式為
arrayName[0] .propertyName1 = property1Value& arrayName[0] .propertyName2 = property2Value 但是透過 JQuery 發送的資料卻是
arrayName[0] [propertyName1] = property1Value& arrayName[0] [propertyName2] = property2Value
要解決這樣的問題要馬可以在 Client 這邊將資料做個轉換,要馬就是在 MVC 這邊要透過客製 Model Binder 的方式自行轉換。這邊筆者是比較傾向 Client Side 處理,且黑暗大那也已有現成又漂亮的解法,
對於基本型態陣列的處理,可參閱使用jQuery.post傳送字串陣列參數到ASP.NET MVC - 黑暗執行緒這篇,透過$.param()將參數序列化,並在traditional參數這邊帶入true,指定用傳統的陣列參數的序列化形式即可。
對於非基本型態的陣列處理,可參閱使用jQuery.ajax傳送物件陣列給ASP.NET MVC - 黑暗執行緒這篇,黑暗大刻了一個 JQuery Plugin 在發送資料前會將資料格式用正規表示式進行對應的轉換。
read morePosts
ASP.NET MVC - Remove unnecessary view engine
ASP.NET MVC 預設會載入多個 View engine,儘管在專案建立之時我們就已明確的指定了所要使用的 View engine。
以一個最簡單的空專案來看,這邊特地將 Home 的 Index view 給刪掉,接著將之運行,運行後因為找不到 View 所以會顯示錯誤頁面。
{% img /images/posts/RemoveUnnecessaryViewEngine/1.png %}
這邊可以看到系統會嘗試載入不同程式語言所撰寫的不同 View engine 檔。然而在大部分的情況下,我們只會選用ㄧ種程式語言與View engine。
因此像這樣載入過多的 View engine 反而形成不必要的耗費,故我們可以在啟動時加入程式將之移除。
protected void Application_Start() { ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new RazorViewEngine()); ... } 再次運行就會看到這樣作就只會嘗試載入我們預期的 View Engine。
{% img /images/posts/RemoveUnnecessaryViewEngine/2.png %}
如果真有同時載入多個 View engine 的需求,那我們就不能像這樣直接的將 View engine 給移除,取而代之的是我們必需去調整 View engine 的順序,取比較好的載入順序。
read more