ASP.NET MVC/C#開發(fā)Tips記錄。
1.編寫CSS的時候,先將在原有的cshtml的<style>...</style>,因?yàn)檫@樣就有相關(guān)的智能提示。寫完后再做成單獨(dú)的css文件,使用@Styles.Render或直接link載入。(現(xiàn)在版本的VS已經(jīng)改進(jìn)了這點(diǎn))
2.在Action中使用View(...)會將Viewbag里面的東西傳過去,但是使用RedirectToAction(...)可能Viewbag里面的東西傳不過去。
使用反射來處理enum類型的話,代碼如下:
view plaincopy在CODE上查看代碼片派生到我的代碼片
- Type XXXXX= assembly.GetType("YYYYY", true);
- Array enumArray = Enum.GetValues(XXXXX);
3如果使用database first,然后在項(xiàng)目進(jìn)行中,添加使用identity關(guān)鍵字來標(biāo)識字段,那么記得雙擊edmx文件,右鍵,update from database。否則會報IDENTITY_INSERT問題。
4使用CTRL+SHIFT+F可以呼出一個更加強(qiáng)大的查找窗口,會將找到的所有結(jié)果列出來而不是一個一個選中顯示出來。
VsVim這個插件簡直贊!
5 MVC5是通過name來綁定元素的,不是id。但一般為了保險,id和name設(shè)置為一樣。
6 view plaincopy在CODE上查看代碼片派生到我的代碼片
7 在一個叫做Create的Action中return Index(),如果Index()最后一句是return View(),那么還是會跳轉(zhuǎn)到create.cshtml中,說明是最上層的Action決定了默認(rèn)cshtml頁面。
8 靠,今天搞了半天,想把ASP.NET MVC5部署到阿里云上,和IIS斗爭了半天,訪問網(wǎng)站老是說什么MvcApplication無法加載,原來是要把Debug改成Release??赡苓€要注意CPU平臺問題。
9 VS2013中,如果發(fā)現(xiàn)代碼提示中,不是默認(rèn)選中最佳提示項(xiàng),而是僅僅是顯示出來(即,無法通過Enter鍵來補(bǔ)全),按ctrl+alt+space來激活suggestion model。
10 工程測試中用的Microsoft.VisualStudio.TestTools.UnitTesting,需要添加的reference是Microsoft.VisualStudio.QualityTools.UnitTestFramework
11 對于某些問題,由于文檔不全或難以理解,從而導(dǎo)致不知道某些類型的名字。這個時候可以再代碼中獲取到這個元素,再通過GetType().ToString()來了解。比如搞Open XML的時候。
12 C#中,dictionary和C++中的不一樣,如果一個key沒有,卻是用了[“xxx”]來引用,那么會拋出異常;調(diào)用Add函數(shù)也是,如果先前有了這個key,那么也會拋出異常。所以最好先前用containskey來確認(rèn)是否存在。
13 LINQ中最后還是轉(zhuǎn)換成SQL查詢的,所以注意,即便是看上去像是string的"=="簡單比較,其實(shí)也是像SQL一樣,不區(qū)分大小寫的。
14 使用ASP.NET MVC中返回json,要記得return Json(..)的第二個參數(shù),要allowGet,否則服務(wù)器會返回500.
15 如果將JS代碼單獨(dú)做成文件來引用,那么js中的url,比如var actionUri = 'Register',默認(rèn)是和該js所在CSHTML文件對應(yīng)的controller下的方法。
16 有錢一定要買一套Resharper的VS插件!實(shí)在是吊!炸!天!
17 如果使用reference類型的變量,并且希望把他加入到list或者別的使用的地方,盡量使用clone,否則指向的是同一個對象。
18 除非添加的東西就是微軟的,比如Entity Framework,其他的庫千萬不要用Nuget來管理、下載、更新等,否則常常版本落后太多,bug蛋疼,如raphael.js.
19 發(fā)現(xiàn)個非常奇葩的事情,如果在ASP.NET MVC5中使用的一些cs文件不是本工程的,而是引用自其他工程的,那么即便如此,如果直接將本工程復(fù)制到IIS的網(wǎng)站目錄下(沒有復(fù)制被引用的文件),那么也能正常運(yùn)行。猜測,實(shí)際上這些代碼已經(jīng)被編譯到Bin文件中了。
20 類B繼承類A,那么如果B可修改繼承下來的函數(shù)的返回值,這也算是覆蓋,即需要new該函數(shù);如果是數(shù)據(jù)成員,則名字一樣就要用new;但是如果是virtual的數(shù)據(jù)成員,必須要類型也一樣才能override