ASP.NET MVC Preview 2發布有很多天了。這段時間一直在研究並應用到實際的項目中。我對它的一句話感受是:
的確很完美,的確很粗糙。完美的是產生的XHTML代碼我可以完全使用XHTML1.1標準DTD了;粗糙的是還不夠成熟,View裡還有cs代碼存在,控制頁面的Title屬性和伺服器控制項的資料繫結還得通過View的codebehind代碼實現。
如果你還不是很瞭解它,請從Scottgu發表的 road map 裡查看詳細的介紹和教程。
這篇日誌記幾個要點,最近的記憶力越來越差了,真的老了?
1。IIS6下的Routing配置。
按照介紹,在IIS6裡應該有如下文法{controller}.mvc/{action}/{id}的Route,需要把mvc副檔名映射到aspnet_isapi.dll來處理請求。但如果這樣就得不到一個完美的URL。這不是我想要的啊!其實很簡單,我可以把所有的請求都交給aspnet_isapi.dll來處理,雖然在效能上損耗一點點,但得到的成績是不能估量的。方法就是把aspnet_isapi.dll添加到“萬用字元應用程式對應”裡。即可達到完美URL的目標。
2。Best Practices about Form Design
這裡的Form就是web裡最基本的Form(不是傳統ASP.NET裡的Web Form)。上代碼: 1<fieldset>
2 <legend>Fill the following fields:</legend>
3 <form action="/Products/Save" method="post">
4 <p><label for="pname">Name:</label><%= Html.TextBox("pname") %></p>
5 <p><label for="pcat">Category:</label><%= Html.Select("pcat", ViewData.Categories)%></p>
6 <p><label><%= Html.CheckBox("prec", "Recommanded", false) %></label></p>
7 <p><%= Html.SubmitButton("psubmit", "Submit") %></p>
8 </form>
9</fieldset>
這是在View裡面的well formed XHTML代碼(注意不是HTML)。一個好的建議是每一個input都有一個label圍繞,這樣的一個好處是點“Name"的時候,游標會自動定位到pname這個input文字框裡,當然它的好處不僅僅是這一個。要完成這個過程還需要一個Action: 1public void Save(string pname, int pcat, string prec){
2 Product product = new Product();
3 product.Name = pname;
4 product.CategoryId = pcat;
5 product.IsRecommanded = !(prec == null);
6
7 dataContext.Products.InsertOnSubmit(product);
8 dataContext.SubmitChanges();
9
10 RenderView("SaveOK");
11}
可能你看到了一些非常奇怪的代碼。但是目前我不能不這麼做。
問題:Action的參數prec為什麼不直接用bool類型?
答案:我們知道CheckBox有個checked屬性,但在ASP.NET MVC裡目前還不能擷取到它,不能直接用bool類型的原因也是因為自動對應值是擷取控制項value屬性的值而不是其他屬性的值。
[OK,太晚了,未完成……]