顯示具有 ASP.Net MVC 標籤的文章。 顯示所有文章
顯示具有 ASP.Net MVC 標籤的文章。 顯示所有文章

2012年9月12日 星期三

Telerik Extensions for ASP.NET MVC Open Source Project


在學習網頁設計的時後,有一些高手已經做好的元件可以用。
Telerik Extensions是受到好評的套件,可以用NuGet下載並安裝套件喔!

Telerik Extensions 的範例介紹
http://demos.telerik.com/aspnet-mvc/razor

這邊是高手的分享,如何將Telerik Extensions 套進你的專案使用呢? 看這邊:
http://blog.darkthread.net/post-2011-06-05-telerik-ext-for-asp-net-mvc.aspx


2012年8月31日 星期五

[ASP.Net MVC] ViewBag、ViewData 和 TempData 的區別


ViewData TempData 都可以傳遞弱類型資料,區別如下:
ViewData 只在當前 Action 中有效,生命週期和 View 相同;
TempData 的資料至多只能經過一次Controller傳遞,並且每個元素至多只能被訪問一次,訪問以後,自動被刪除。
TempData 一般用於臨時的緩存內容或拋出錯誤頁面時傳遞錯誤資訊,可以將TempData 在使用之前存儲到相應的 ViewData 中以備迴圈使用。

Index
public ActionResult Index()
{
    ViewBag.Message = "Welcome to ASP.NET MVC!";
    ViewData["myName"] = "
我的名字";
    TempData["myAgeOne"] = "26
";
    TempData["myAgeTwo"] = "27
";
    return View();
}
姓名:@ViewData["myName"]
<br />
年齡1@TempData["myAgeOne"]

Index網頁呈現如下:



About
姓名:@ViewData["myName"]
<br />
年齡1@TempData["myAgeOne"]
<br />
年齡2@TempData["myAgeTwo"]



ViewBag.Name=ViewData["Name"];
相同:使用同一個字典集合(資料來源)
不同:ViewBag MVC3 新增語法,ViewBag 不再是字典的鍵值對結構,而是 dynamic 動態類型,它會在程式運行的時候動態解析。不過 ViewBag 雖然說因為 dynamic 的特點,在使用時可以不用類別轉換,但也因為這樣,在速度上是會比 ViewData 慢一些。

Dynamically Typed Object 動態類型
C#4.0加入了dynamic關鍵字,可以申明一個變數的static類型為dynamic
使用dynamic的好處在於,可以不去關心物件是來源於COM, IronPython, HTML DOM或者反射,只要知道有什麼方法可以調用就可以了,剩下的工作可以留給runtime
參考資料

2012年8月30日 星期四

[ASP.Net MVC] 電腦同時存在VS2010和VS2012的問題


我的電腦先後都安裝了VS2010和VS2012,如果在VS2010新建MVC3 的專案,執行後會出現以下問題:

'C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v2.0\Assemblies\System.Web.WebPages.dll' 和 'C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.dll' 兩者中都有型別 'System.Web.Mvc.ModelClientValidationStringLengthRule' K:\Learning\Microsoft\MVC\Test Porject\OrdToFood\OrdToFood\Models\AccountModels.cs

Google後的解決方法:

1. 在Web.config檔裡,新增<appSettings>的設定,Webpages:Version為1.0.0.0.

<appSettings>
    <add key="webpages:Version" value="1.0.0.0"/> 
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>


2.在方案總管中,在專案名稱上右鍵選擇「卸載專案」,再重覆在專案名稱上右鍵選擇「編輯ProjectName.csproj」

   在裡面找到這兩行的參考字串:
<Reference Include="System.Web.WebPages"/> 
<Reference Include="System.Web.Helpers" />

  用下列的設定取代上面的字串:

<Reference Include="System.Web.WebPages, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL "/> 
<Reference Include="System.Web.Helpers, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

3.然後,儲存ProjectName.csproj之後,再把專案掛載回來就okok啦!


[ASP.Net MVC] 應使用 IIS Express 進行開發與測試

IIS 7.5 Express 是一套針對 ASP.NET 開發人員特別設計的 IIS 7.5 版本.

 Visual Studio 2010 SP1 已經正式將 IIS Express 整合進 Visual Studio 2010,也代表著在 Visual Studio 2010 裡面的網站專案都可以方便的指定使用 IIS Express 來執行網站。

一般沒有特別注意有這個東西的時後,我一般都是使用Web Development Server 來進行測試,不過這和部置至IIS上會有一些問題產生,尤其是IIS7以後的版本,所以,專家都建議用IIS 7.5 Express 喔!

專家的建議:




ASP.Net MVC – Razor的@helper 及 語法

在Razor的寫法裡,有很方便的@helper 及 @functons 語法,竟然有什麼好處呢?

@helper 是指預先編譯,會讓第一次網站執行時比較快速外。
有時後View需要做一些動作,剛好這個動作就是很多View會用都的,我們就可以考慮用@helper的方法來寫。

例如,View或許會重覆用到引用script的寫法,若要弄成一個共用的method,只要傳入script name即可,我們可以這樣做:

原本 Index.cshtml 是長這樣:


在 Index.cshtml 裡我新增 @helper Script(string scriptName) ,這個意思就是可以把。Script這個Method放入 @helper 裡面,以後要用Script這共用的方法時,只要@Script 就可以了喔!



以上的方法只有Index.cshtml可以自己用的很爽,但不能給其他的View共用。要怎麼辦呢?

在方案總管那新增App_Code目錄,再新增項目中選 Razor檢視頁面的型態。





在新增的Content.cshtml裡,先刪掉原有的預設tag,再把  @helper Script(string scriptName) 的內容移到Content.cshtml裡。


Index.cshtml在使用的時後,必須小改一下,只要改入App_Code目錄下的Content.cshtml的檔名即可。像這樣:



真是太好了,這樣大家就可以用了喔!

至於 @functons 只是有一點點不一樣,可以參考Razor 學習筆記 - @functions 和 @helper

這裡還有更多大師的教學喔!

2012年8月29日 星期三

[ASP.Net MVC] 與Ajax的運用


AjaxHelper 類別包含的方法可提供 MVC 應用程式內 ASP.NET AJAX 中的用戶端功能,例如,建立非同步表單和呈現連結。 AjaxHelper 類別支援非同步部分頁面更新。 AjaxHelper 類別的擴充程式位於 System.Web.Mvc.Ajax 命名空間中。

我有練習以下兩個比較基本的教學,都可以成功喔!



在MVC的語法上使用 @Ajax 是引用AjaxHelper 類別
常用的方法有 :

  1. ActionLink :已多載。 傳回錨定項目,其中包含指定之動作方法的 URL;按一下動作連結時,系統便會使用 JavaScript 以非同步方式叫用該動作方法。 
  2. BeginForm :將開頭的 <form> 標記寫入至回應。
  3. GlobalizationScript :傳回 HTML script 項目,其中包含定義文化特性資訊的全球化指令碼參考。
  4. RouteLink :已多載。 傳回錨定項目,其中包含指定之路徑值的虛擬路徑;按一下連結時,系統便會使用 JavaScript 以非同步方式對該虛擬路徑提出要求。


在View/Shared/_layout.cshtml檔案裡加上引用MicrosoftAjax.js及MicrosoftMvcAjax.js

AjaxController的寫法。PartialViewResult 是提供給 Ajax呼叫的進入點,將會回傳一個表單。PartialView("_IndexPartial", result) 會以部份檢視的方式呼叫 View/Ajax/_IndexPartial.cshtml 。

主頁 Index.cshtml。Ajax.BeginForm的寫法就是將整個表單丟給Server去處理的寫法。要指定UpdateTargetId,之後Ajax得到回覆後,會動態載入新頁面至 <div id="targetDiv" ... 的位置上。

動態載入的部份頁面 _IndexPartial.cshtml 。若是內部呼叫的頁面,可以加底線區分。


執行的結果就如同範例一樣,網頁不需要Refresh就可以動態載入下方的資料。


2012年8月28日 星期二

[ASP.Net MVC] 部署問題 - 使用者 'IIS APPPOOL\ASP.NET v4.0' 的登入失敗


繼上篇 MVC 網站部署的基礎篇之後,雖然首頁沒有問題,但只要有連資料庫的動作卻會出現-"使用者 'IIS APPPOOL\ASP.NET v4.0' 的登入失敗" 的問題。



還記得我們在IIS設定應用程式集區嗎? 從ASP.NET 4.0 (v4.0.30319) 的進階設定進去,可以找到「識別」為ApplicationPoolIdentity, 這是虛擬帳號,所以我們網站是沒有權限可以存取資料庫和寫入檔案。



當 ASP.NET 網頁程式需要寫入磁碟檔案時,就必須讓該帳戶具有寫入檔案的權限,方法有兩種:

1.指定的帳戶名稱:
    參考:http://bennyy1256.blogspot.tw/2012/03/iis-apppoolaspnet-v40.html

2.在 IIS更改ASP.NET 4.0 應用程式集區的「識別」為帳密方式。

  • 選自訂帳戶: (這裡我是用window登入的帳密)

  • 確定後,識別為有效的帳號:



這樣就完成了喔!

如果部署還有其他問題,可以參考以下網站:

ASP.NET 4 MVC 2 佈署到 IIS 7.5 問題 (1)






[ASP.Net MVC] 網站部署 - 基礎

參考資源:


1. 先至「開始或關閉Window功能」將「IIS管理服務」打勾。


2.至「控制台\所有控制台項目\系統管理工具\ IIS 管理員」新增網站。

   2.1 確定應用程式集區裡的 ASP.NET 4.0 (v4.0.30319)被啟動
  • 這有有一點要提醒:請務必註冊 ASP.NET 4.0 (v4.0.30319,如果是在 .NET Framework 4 安裝後才安裝 IIS 的,請記得執行 %WINDIR%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis -ir,若是 32 位元則是 %WINDIR%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis -ir)。
  • 應用程式集區 - 確定  ASP.NET 4.0 狀態為"已啟動"。 


   2.2 裡站台裡新增網站
  



  • 在C:\inetpub先建好MvcDemo的目錄。
  • 應用程式集區的版本,請使用ASP.NET 4.0 (v4.0.30319)
  • port不要和其他的網站衝突即可。



3.  用系統管理員身份執行 VS 2012,開啟你已開發的MVC網站專案。方案總管中於專案名稱按右鍵執行「發行」。

  • 假設我們是新部署的網站,必須新增,只要新增過一次後,發行設定檔的清單會存有紀錄,下次只要選用即可。
  • 發行方法:檔案系統 ( 發行時必須將程式copy至主機發行)
  • 目標位置:和剛才新增網站的實體路徑相同。
  • 目的地URL:一樣是參考在IIS新增網站的資料。http://主機名稱 : 連接埠。

    發行後的結果: 耶~ 成功了!



這是基本的發行步驟,沒有遠端發行,目前我用VS2012  發行方法為 Web Deploy ,都一直失敗,所以發行方法先以檔案系統為練習。

下篇再來研究與資料庫的部署....


2012年8月27日 星期一

[ASP.Net MVC]資料驗證 Model Validation

實做範例是參考:

ASP.NET MVC(6):資料驗證 Model Validation


程式碼的部份就不再貼上來了。已經講得非常詳細囉~

現在要補強我對Model Validation的觀念,小朱大師在MVC2 的時代有借介過,可以參考

ASP.NET MVC 2.0 新功能:資料塑模驗證 (Model Validation)


另外,黑暗執行緒大師的這一篇是一定要看的:

ASP.NET MVC 3 豬走路範例 (2)

只要先把要Model Validation 寫好,再寫Controller,這樣可以直接產生View,實在太神奇了!

在Controller裡加上兩個Action,Index()及Index(Models.ValueAddModel Model),第一個預設為[HttpGet],第二個則是標上[HttpPost]兩個ActionFilterAttribute,如此可區分出用http://localhost:6058/Index時會先連上 Index (),按Submit送出時再連到 Index(Models.ValueAddModel Model) (因為是HTTP POST)。

如果在Controller 寫以下的程式,可以POST回來的網頁資料 (HTML表單欄位資料) 被自動轉成 ValueAddModel  物件屬性,這就是神奇的Model Binding機制,透過這種方式,程式碼變得很簡潔!



.

[ASP.Net MVC3] 學習資源

最近在學ASP.Net MVC,是個幼幼班等級。好險網路上有好多高手的分享: 






有一系列的分享,從空的MVC專案開始初階的教學,我都是一步一步照著看,照著做,幫助很大喔!

很多寶物快來挖吧!!!  有一些操作和觀念的補強,是很好的參考。
.阿源哥哥的網頁應用程式自學心得報告,太值得看囉!