關於ASP.NET MVC 3 RC2的更新(和其中一個臭蟲的替代解決方案)

  • 22941
  • 0
  • 2011-06-23

摘要:關於ASP.NET MVC 3 RC2的更新(和其中一個缺陷的替代解決方案)

[原文發表位置] Update on ASP.NET MVC 3 RC2 (and a workaround for a bug in it)

[原文發表時間] Tuesday, December 14, 2010 4:53 PM

上周我們發佈了ASP.NET MVC 3的RC2 版本,我部落格這裡寫了很多細節。

我們發佈候選發佈版的一個原因是要 幫助找到那些最後的「難以發現的」臭蟲。到目前為止,我們還沒有收到很多RC2版上問題的報告(這是個好消息),儘管我們發現一些詮釋資料快取臭蟲,表現為至少兩種情況:

  • 操作處理方法中可為空的參數存在著問題:對有可為空參數的控制器處理方法(像int? 型別或是一個可以為空的次級屬性的複雜型別),即使是請求包含參數的一個有效值的情況下,可空的參數結果總是是空的。
  • [AllowHtml] 在模型繫結中不允許HTML:即使用一個[AllowHtml]屬性修飾一個模型屬性(用來關閉HTML注入防護功能),在HTML內容傳送給它的時候, 模型繫結仍然會失敗。

這兩個問題都是由於我們在RC2後期很晚的時候急於引進快取最佳化造成的。我們將會在ASP.NET MVC 3最終版本中解決這個問題。你可以用下面的解決方案暫時避開這個問題。

現在可用的替代解決方案

你可以透過向應用程式中的Global.asax 類裡的Application_Start()事件處理器中添加一行程式碼在當前的ASP.NT MVC 3 RC2版本中處理上面的問題:

上面的程式碼為使用 DataAnnotationsModelMetadataProvider型別設置了ModelMetaDataProviders.Current屬性。這使ASP.NET MVC 3去使用詮釋資料的提供程序,這個提供程序沒有我們在RC2版本後期加入的過於積極的快取邏輯,從而防止出現導致上面這些問題的快取問題。

你不需要改變你應用程式中的任何其他程式碼。一旦你做了這樣的改變,上面的問題就解決了。如果ASP.NET MVC 3的終極版發佈,你的程式中不必有這行程式碼(儘管有這行程式碼的話也不會有任何問題)。

希望這對您有幫助,同時也希望您能向我們繼續提供回饋。

Scott

除了發表部落格,我現在也用Twitter保持快速更新並共享連結。請關注我: twitter.com/scottgu