ASP.net 2.0的推出對我們程式員來說是再好不過的事情了,不僅功能更豐富了,而且使我們的開發效率大大提高,不過什麼東西都有兩面性,asp.net2.0所帶來的新控制項給我們的開發帶來方便的同時,卻在某些方面與我們的習慣相衝突。
最近用asp.net做系統,很習慣的在做使用者認證的部分建了一個新的網頁名字是Login.aspx,當然不管你是編譯也好調試也好都沒有問題,一切如你希望的那樣。但是,當你publish了你的系統,建立了虛擬目錄,然後通過IE瀏覽的時候,問題出現了,頁面會顯示“Cannot convert type 'ASP.login_aspx' to 'System.Web.UI.WebControls.Login'”。仔細想了想,ASP.net2.0本身附帶了Login控制項,回過頭看看自己建立的Login.aspx頁面自動產生CodeBehind類也叫Login,這正好和系統的Login控制項衝突了。既然衝突了,那就換個名字吧,可以長久以來登入的頁面都是Login,如果叫個LoginPage,感覺怪怪的。我想不改頁面的名字有不想使兩個類的名字衝突,那就給codebehind類加個名字空間,結果呢?編譯都通不過,問題在哪裡呢?看看codebehind類的聲明就明白了:public partial class Login : System.Web.UI.Page
partial表明了這隻是類的一部分,另外的部分是不可見的,不可見當然就不能修改了。但是,vs2005給我提供了rename的功能,當你修改類的聲明的時候,vs會將這個類的其它部分自動rename,所以如果你用文字編輯器修改代碼的話,肯定會出問題的。所以解決的方法就是,不修改頁面的名字,只修改類的名字,然後修改頁面中Inherits的指定了,例如,你將類的名字修改為Mylogin,然後在頁面中將Inherits的指定改為:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="MyLogin" %>
修改完後測試,一切正常。