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的一个东西,但是我点了连接,提示我下载已经移除了,不知道怎么回事,要是有搞定了的同学,也请通知我下哈,学习学习;