aspnetmvc4源碼
Ⅰ 如何調試MVC4的代碼
下載了 http //aspnetwebstack codeplex com/SourceControl/list/changesets 這上面
.NET 4.0 RTM的源碼,
裝了一個git,然後下載就可以了
git clone https //git01 codeplex com/aspnetwebstack.git
時間稍微長了點兒,半個小時吧;
然後裡面src全是MVC4的源碼(其實很大一部分都在裡面了)
解決反感是runtime.sln的,打開之後,在裡面新建一個MVC4的項目,
這里有個問題,我下載的MVC4,在
system.web.mvc項目里Properties\CommonAssembley.cs里,全是5.0.0.0的版本號,
我把他改成了5.0.0.1
#if
ASPNETMVC [assembly: AssemblyVersion("5.0.0.1")] [assembly:
AssemblyFileVersion("5.0.0.1")] [assembly: AssemblyProct("Microsoft ASP.NET
MVC")] #elif ASPNETWEBPAGES
然後修改根目錄下的 web.config
<appSettings>
<add
key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="PreserveLoginUrl" value="true" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
這里之所以改成3.0.0.0的原因,是因為在我下載的源碼里,他的版本號就是3.0,
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers"
publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0"
newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc"
publicKeyToken="31bf3856ad364e35" />
<bindingRedirect
oldVersion="1.0.0.0-4.0.0.0" newVersion="5.0.0.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages"
publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0"
newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="EntityFramework"
publicKeyToken="b77a5c561934e089" />
<bindingRedirect oldVersion="1.0.0.0-5.0.0.0"
newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease"
publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-1.3.0.0"
newVersion="1.3.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime> 這里的改成了我自己的版本號
然後修改view下面的web.config
<configSections>
<sectionGroup name="system.web.webPages.razor"
type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup,
System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35">
<section name="host"
type="System.Web.WebPages.Razor.Configuration.HostSection,
System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages"
type="System.Web.WebPages.Razor.Configuration.RazorPagesSection,
System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
這里修改成了3.0,當然具體是什麼,看你自己下載的,但是我覺得大部分應該跟我的是一樣的(環境VS2012,源碼4.0 RTM)
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory,
System.Web.Mvc, Version=5.0.0.1,
Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter,
System.Web.Mvc, Version=5.0.0.1,
Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc,
Version=5.0.0.1, Culture=neutral,
PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc,
Version=5.0.0.1,
Culture=neutral,
PublicKeyToken=31BF3856AD364E35">
同樣,修改之(具體是不是不修改也成,我就不知道了,我是按照網上的方法改的,最後的地方,會給出連接大家注意學習吧)
這樣,配置文件和MVC代碼中的版本號,就修改完了,
然後打開VS2012的命令行,執行
Run
"sn.exe -Vr *,31BF3856AD364E35" in the Visual Command line (哈哈,你看,我真的是COPY的,原創的東西幾乎沒有)
然後把項目中的system.web.mvc的引用,改到你的MVC4的源碼里的項目,當然,不止這一個,不然會有很多地方報錯的,大致的DLL有 :
system.web.razot; system.web.webpages;system.web.webpages.deployment;
system.web.webpages.razor; 這里不全沒關系,網頁上會明確提示少哪個的.
如果出現了一個類型轉換的錯誤:
用戶代碼未處理
System.InvalidCastException
HResult=-2147467262
Message=[A]System.Web.WebPages.Razor.Configuration.HostSection 無法強制轉換為
[B]System.Web.WebPages.Razor.Configuration.HostSection。類型 A
源自「System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35」(在上下文「Default」中的「C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.WebPages.Razor\v4.0_2.0.0.0__31bf3856ad364e35\System.Web.WebPages.Razor.dll」位置處)。類型
B 源自「System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35」(在上下文「Default」中的「C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary
ASP.NET
Files\root\49f25bf0\9ce908d5\assembly\dl3\70f2ab4b\b0630cdc_834fce01\System.Web.WebPages.Razor.dll」位置處)。
Source=System.Web.WebPages.Razor
這個錯誤,就是我為什麼要該system.web.webpages的版本好的原因了; 如果出現其他DLL,大家也可以隨著改一下;
之後,就可以在頁面中隨便加空間,就能看到斷點的執行了,好運;
Ⅱ asp.net mvc4發布到iis7.0,訪問不正常。
看你這個link和script標簽中的字元串。應該用的是BundleConfig來配置樣式表和腳本。那麼出現這種情況就有兩種可能。第一種可能的確是和Layout沒有載入到有關。第二種是BundleConfig中的寫法錯誤(也有可能發布的時候樣式表和腳本文件沒有一起發布,不過這種可能性比較小,此處忽略)。解決方案如下:
對於第一種情況,載入不到的原因可能是:你用了區域Areas。沒有指定全局Layout,也沒有指定局部Layout那麼當然載入不到。你只要在每個cshtml文件的開頭都用
Layout="~/Layout路徑";
這種形式指定。這樣就解決了。
對於第二種。稍微復雜。在BundleConfig中你肯定用到了如下的寫法:
bundles.Add(newStyleBundle("~/Content/css").Include("~/Content/site.css"));
這里你要注意,默認情況下,BundleConfig的忽略規則會無視壓縮文件,比如
bundles.Add(newStyleBundle("~/Content/css").Include("~/Content/site.min.css"));
這個路徑裡面帶有「min」。會被認為是壓縮過的樣式文件。直接忽略。關於壓縮的事情建議你搜索一下,關鍵字直接就用「BundleConfig」就行了。一大堆。你試試把min去掉或許就行了。
還有一點。還是這個文件路徑的問題。你看這個StyleBundle或者ScriptBundle裡面的字元串。必須要和你文件的路徑吻合。比如:
bundles.Add(newStyleBundle("~/Content/themes/base/css").Include(
"~/Content/themes/base/jquery-ui.css"));
關於/Content/themes/base/css這裡面的最後一個css。這個好像是可以自定義的。我以前研究過mvc4源代碼。現在忘記掉了。你可以自己去試試。或者也去看看源代碼。
至於include中的路徑就更不用說了必須要寫相對路徑。
就是這樣了。
Ⅲ asp.net 4.0 與asp.net 3.5的MVC有什麼明顯區別
4.0中你可以使用更多新特性,
在
ASP.NET
MVC的源碼中提供了對4.0的一些擴展,這在3.5中是沒有辦法用的
比如可選參數的Helper、支持dynamic的ViewPage:DynamicViewPage
、一些新的驗證Datameta
這些特性在Microsoft.Web.Mvc.AspNet4.dll中
Ⅳ 關於.NET MVC4 Action 方法返回JsonResult和返回String類型的區別
讓ASP.NET MVC頁面返回不同類型的內容
在ASP.NET MVC的controller中大部分方法返回的都是ActionResult,更確切的是ViewResult。它返回了一個View,一般情況下是一個HTML頁面。但是在某些情況下我們可能並不需要返回一個View,我們可能需要的是一個字元串,一個json或xml格式的文本,一個圖片。
ActionResult是一個抽象類,我們平時比較常用的ViewResult是它的派生類,所以我們也可以寫一個StringResult、XmlResult、ImageResult來實現上面提到的需求。由於返回字元串可以有更簡單的方法,直接將需要返回字元串的方法的返回值設置成string型就可以了,JsonResult在ASP.NET MVC中已經有提供。所以下面只演示XmlResult和ImageResult。
ASP.NET MVC項目是開源的(可以在http://www.codeplex.com/aspnet下載源代碼),所以我們可以參考其中ViewResult和JsonResult的代碼進行改寫。主要的思路是設置返回數據流HTTP Header中的Content-Type,然後將要返回的內容寫入Response中。
先演示XmlResult
XmlResult的代碼:
1 public class XmlResult:ActionResult
2 {
3 // 可被序列化的內容
4 object Data { get; set; }
5
6 // Data的類型
7 Type DataType { get; set; }
8
9 // 構造器
10 public XmlResult(object data,Type type)
11 {
12 Data = data;
13 DataType = type;
14 }
15
16 // 主要是重寫這個方法
17 public override void ExecuteResult(ControllerContext context)
18 {
19 if (context == null)
20 {
21 throw new ArgumentNullException("context");
22 }
23
24 HttpResponseBase response = context.HttpContext.Response;
25
26 // 設置 HTTP Header 的 ContentType
27 response.ContentType = "text/xml";
28
29 if (Data != null)
30 {
31 // 序列化 Data 並寫入 Response
32 XmlSerializer serializer = new XmlSerializer(DataType);
33 MemoryStream ms = new MemoryStream();
34 serializer.Serialize(ms,Data);
35 response.Write(System.Text.Encoding.UTF8.GetString(ms.ToArray()));
36 }
37 }
38 }
在controller中調用它
1 public ActionResult Xml()
2 {
3 // 創建一個DemoModal對象,No屬性為1,Title屬性為Test
4 DemoModal dm = new DemoModal() { No = 1, Title = "Test" };
5
6 // 序列化為XML格式顯示
7 XmlResult xResult = new XmlResult(dm, dm.GetType());
8 return xResult;
9 }
Ⅳ 如何將mvc4.0部署iis7
最近在研究MVC4,使用vs2010,開發的站點在發布和部署到iis7上的過程中遇到了很多問題,現在將解決的過程記錄下來,以便日後參考,整個過程主要以截圖形式呈現
vs2010的安裝和mvc4的安裝不在本次記錄之列,主要記錄網站發布和iis的部署
使用的版本如下圖所示:
iis為7.0:
vs2010,.net framework 為4.0.30310 ,安裝mvc4需要升級vs2010到vs2010 sp1 版本,見圖示:
mvc4:
為了測試需要,在項目ZPG.SpecialSite中創建控制器HomeController,並創建視圖Index.cshtml,如下圖:
編輯視圖頁面,添加測試用文字,如圖所示:
接下來對剛剛創建的mvc4.0站點進行發布,步驟如下:
1.右擊需要發布的項目,在彈出的菜單中選擇「發布...」選項
2.在「發布web」對話框中進行設置,配置文件名稱默認為「配置文件1」可以修改為需要的名字,以便識別,也可以不改。發布方法選擇「文件系統」,目標位置處選一個文件夾用於存放將要發布的整個站點所有文件,這里我選擇為「D:/我的文檔/桌面/ZPGWeb」,然後點擊「發布」按鈕。如圖:
3.點擊發布後在指定的文件夾生成站點文件,發布成功!
接下來將發布成功的站點部署到iis7.0。
步驟如下:
1. 安裝 Microsoft .net FrameWork 4.0安裝包(網站開發時候使用的就是.net framework4.0框架);
2. 安裝ASP.NET MVC 4.0 ;
3. 設置IIS的「ISAPI和CGI限制」中的「ASP.NET v4.0.0.30319」為允許,如下圖所示:
4.在iis7.0中發布網站,如圖,設置網站主目錄為「D:/我的文檔/桌面/ZPGWeb」:
5.設置該網站(站點「SpecialSite」)應用程序池的.net framework 版本為4.0.30196 :
添加應用程序池:
將該添加的應用程序池設置給站點SpecialSite
6.至此完成了mvc4.0站點在iis7.0的部署。
接下來在瀏覽器輸入http://localhost查看剛才部署的mvc4.0項目,如下圖:
如果出現上圖內容,表明iis7.0成功運行由mvc4.0創建的項目!!
後續注意點:
1.如果讀者使用的iis是在安裝完.net framework 之後才安裝的,需要進行iis注冊,開始--運行--cmd,打開命令行提示符,輸入命令如下
C:/Windows/Microsoft.NET/Framework/v4.0.30319/aspnet_regiis.exe -i
回車運行,如果讀者的伺服器是64系統,那麼需要使用命令C:/Windows/Microsoft.NET/Framework64/v4.0.30319/aspnet_regiis.exe -i 來運行注冊iis。
2.由於mvc4.0在創建項目後,默認在項目下的App_Start文件夾中的文件「RouteConfig.cs」里自動配置了「默認路由」為HomeController控制器下的Index方法(ActionResult),所以不需要在站點默認文檔里配置默認文檔名字,該站點會自動根據mvc的路由機制找到默認需要顯示的視圖文件。如下圖:因為找了很久沒有這些簡單入門的介紹,所以花點時間寫寫,或許能對一些跟我類似的入門級朋友有幫助!!`(*∩_∩*)′
Ⅵ ASP.NET MVC 4中如何讀取web.config中的配置
用ConfigurationManager這個類。
Ⅶ ASP.NET MVC 4中如何讀取web.config中的配置
ASP.NET MVC 4中讀取web.config中的配置方法如下:
web.config內容:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<compilation defaultLanguage="c#" debug="true" />
</system.web>
<appSettings>
<add key="ConnectionInfo" value="server=(local);database=Northwind;Integrated Security=SSPI" />
</appSettings>
</configuration>
讀取配置的方法:
void Page_Load(object sender, EventArgs e)
{
string connectionInfo = ConfigurationSettings.AppSettings["ConnectionInfo"];
using(SqlConnection connection = new SqlConnection(connectionInfo))
{
connection.Open();
// perform work with connection
}
}
Ⅷ 求C# MVC4 做的上傳附件下載附件的功能 附件路徑存在資料庫中 附件存在項目下的uploading文件中 求源碼
建議使用uploadfy插件,但有一點,配置文件里得改,不然不能上傳大文件
下載在Controller里返回FileStreamResult就行了
return File(new FileStream(fullPath, FileMode.Open), "application/octet-stream", Server.UrlEncode(Path.GetFileName(fullPath)));
Ⅸ 如何調試MVC4的代碼
下載了 http //aspnetwebstack codeplex com/SourceControl/list/changesets 這上面
.NET 4.0 RTM的源碼,
裝了一個git,然後下載就可以了
git clone https //git01 codeplex com/aspnetwebstack.git
時間稍微長了點兒,半個小時吧;
然後裡面src全是MVC4的源碼(其實很大一部分都在裡面了)
解決反感是runtime.sln的,打開之後,在裡面新建一個MVC4的項目,
這里有個問題,我下載的MVC4,在
system.web.mvc項目里Properties\CommonAssembley.cs里,全是5.0.0.0的版本號,
我把他改成了5.0.0.1
#if
ASPNETMVC [assembly: AssemblyVersion("5.0.0.1")] [assembly:
AssemblyFileVersion("5.0.0.1")] [assembly: AssemblyProct("Microsoft ASP.NET
MVC")] #elif ASPNETWEBPAGES
然後修改根目錄下的 web.config
<appSettings>
<add
key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="PreserveLoginUrl" value="true" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
這里之所以改成3.0.0.0的原因,是因為在我下載的源碼里,他的版本號就是3.0,
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers"
publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0"
newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc"
publicKeyToken="31bf3856ad364e35" />
<bindingRedirect
oldVersion="1.0.0.0-4.0.0.0" newVersion="5.0.0.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages"
publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0"
newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="EntityFramework"
publicKeyToken="b77a5c561934e089" />
<bindingRedirect oldVersion="1.0.0.0-5.0.0.0"
newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease"
publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-1.3.0.0"
newVersion="1.3.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime> 這里的改成了我自己的版本號
然後修改view下面的web.config
<configSections>
<sectionGroup name="system.web.webPages.razor"
type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup,
System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35">
<section name="host"
type="System.Web.WebPages.Razor.Configuration.HostSection,
System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages"
type="System.Web.WebPages.Razor.Configuration.RazorPagesSection,
System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
這里修改成了3.0,當然具體是什麼,看你自己下載的,但是我覺得大部分應該跟我的是一樣的(環境VS2012,源碼4.0 RTM)
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory,
System.Web.Mvc, Version=5.0.0.1,
Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter,
System.Web.Mvc, Version=5.0.0.1,
Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc,
Version=5.0.0.1, Culture=neutral,
PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc,
Version=5.0.0.1,
Culture=neutral,
PublicKeyToken=31BF3856AD364E35">
同樣,修改之(具體是不是不修改也成,我就不知道了,我是按照網上的方法改的,最後的地方,會給出連接大家注意學習吧)
這樣,配置文件和MVC代碼中的版本號,就修改完了,
然後打開VS2012的命令行,執行
Run
"sn.exe -Vr *,31BF3856AD364E35" in the Visual Command line (哈哈,你看,我真的是COPY的,原創的東西幾乎沒有)
然後把項目中的system.web.mvc的引用,改到你的MVC4的源碼里的項目,當然,不止這一個,不然會有很多地方報錯的,大致的DLL有 :
system.web.razot; system.web.webpages;system.web.webpages.deployment;
system.web.webpages.razor; 這里不全沒關系,網頁上會明確提示少哪個的.
如果出現了一個類型轉換的錯誤:
用戶代碼未處理
System.InvalidCastException
HResult=-2147467262
Message=[A]System.Web.WebPages.Razor.Configuration.HostSection 無法強制轉換為
[B]System.Web.WebPages.Razor.Configuration.HostSection。類型 A
源自「System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35」(在上下文「Default」中的「C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.WebPages.Razor\v4.0_2.0.0.0__31bf3856ad364e35\System.Web.WebPages.Razor.dll」位置處)。類型
B 源自「System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35」(在上下文「Default」中的「C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary
ASP.NET
Files\root\49f25bf0\9ce908d5\assembly\dl3\70f2ab4b\b0630cdc_834fce01\System.Web.WebPages.Razor.dll」位置處)。
Source=System.Web.WebPages.Razor
這個錯誤,就是我為什麼要該system.web.webpages的版本好的原因了; 如果出現其他DLL,大家也可以隨著改一下;
之後,就可以在頁面中隨便加空間,就能看到斷點的執行了,好運;
當然,網上還有個傢伙說不用修改源代碼,但是要下載SkipStrongNames的一個東西,但是我點了連接,提示我下載已經移除了,不知道怎麼回事,要是有搞定了的同學,也請通知我下哈,學習學習;