ASP.NET MVC 重命名[命名空間]而導致的錯誤及發現的ASP.NET MVC Bug一枚


使用VS2012新建了一個Asp.net mvc5的項目,並把項目的命名空間名稱更改了(Src 更改為 UXXXXX ),然后就導致了以下錯誤


剛開始以后是項目的屬性中的命名空間沒有更改過來的問題,但我在重命名時更改的是全局的名稱,而且所有文件的命名空間都已經更改過來了
 

 
稍候思考了一下並在解決方案里搜索了"Src"除了頁面中引用的js腳本外還發現Views/web.config文件中包含"Src"
 
 
 
Asp.net MVC自動生成的代碼如下,可以看到自動生成的代碼將 Views/web.config里引入的命名空間合並到了View頁面代碼中
 
個人猜想這樣做的原因是在views/web.config里設置的命名空間,就可以在View模板中直接使用配置文件中設置的命名空間下的類型
 


 
做了個試驗(確保Views/web.config里沒有引用System.Text命名空間):
將View中的的內容全部清空(包含_ViewStart.html和_Layout.cshtml等)
將views/Login.schtml內容清空並寫入以下內容,然后重新生成並在瀏覽器里查看,就會出現以下錯誤(原因是StringBuilder沒有引用命名空間System.Text)
 

解決辦法有兩種

  1. Views/web.config中導入System.Text(你需要的命名空間)
  2. 在視圖模板中使用完整的類型名(System.Text. StringBuilder)來使用StringBuilder
@{
    DateTime d= DateTime.Now;
    //必須在Views/web.config 配置文件中設置引用System.Text命名空間否則將報錯
    // <system.web.webPages.razor>
    //  <pages pageBaseType="System.Web.Mvc.WebViewPage">
    //      <namespaces>
    //          <!--在全局視圖模板中引用命名空間,在模板就可以直接使用該空間下的類型-->
    //          <add namespace="System.Text" />
    //      </namespaces>
    //  </pages>
    // </system.web.webPages.razor>
    //在配置文件中引用命名空間后,視圖模板中沒有自動完成功能, VS在編譯時也不會檢查該類型是否存在
    //如果類型不存在或輸入錯誤,只有在運行時才會報錯,
    StringBuilder sb = new StringBuilder();
    
    //在視圖模板中直接使用完整的類型,不需要在配置文件中設置
    //VS雖然有自動完成功能,但同樣在編譯時也不會對類型時行檢查
    //同樣只有在運行時才會報錯
    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    sb.Append("1,");
    sb.Append("2,");
 
    }
@d<br />
@sb.ToString()

 

 
意想不到的運行時錯誤(不應該是編譯不通過嗎?)
 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM