重要更新:请参阅底部的更新5,asp.net mvc 3中没有性能问题,这是一个基准问题
我在asp.net mvc2,3 aspx和3 razor中做了一个简单的hello world项目并对它们进行了基准测试.我看到的是:
System Requests per second
-------------------------------------------
asp.net mvc 2 ASPX 4200
asp.net mvc 3 Beta 1 ASPX 3200
asp.net mvc 3 Beta 1 Razor 1700
Run Code Online (Sandbox Code Playgroud)
剃刀有什么问题,它太慢了?
更新: 我重做了测试.所有4个测试虚拟目录都使用相同的.net 4集成模式应用程序池.所有项目都是通过添加新的空x项目并添加1页,其中包含1行文本而没有代码完成的.所有站点都以发布模式编译.我的系统是Windows 7,4 gb i7 4核心.我已经运行了2次测试来预热iis,这些都是第二次运行结果.apache bench参数:ab -n100000 -c1000结果:
System Requests per second CPU Utilization
----------------------------------------------------
asp.net 4 4780 43%
mcv 2 4322 58%
mvc 3 beta 1 aspx 2324 54%
mvc 3 beta 1 razor 1615 54%
Run Code Online (Sandbox Code Playgroud)
更新2 Scott Guthrie在他的博客中回答:
我们还没有完全优化MVC3(我们通常会进行大量的缓存调整).我们希望razor在最终发布之前与.aspx视图引擎具有相同的性能.
System Requests per second …Run Code Online (Sandbox Code Playgroud) 我有这个型号:
public class SearchModel
{
[DefaultValue(true)]
public bool IsMale { get; set; }
[DefaultValue(true)]
public bool IsFemale { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但根据我的研究和答案,DefaultValueAttribute实际上并没有设置默认值.但是这些答案来自2008年,是否有一个属性或更好的方法,而不是使用私有字段将这些值设置为true传递给视图?
无论如何,继承人的观点:
@using (Html.BeginForm("Search", "Users", FormMethod.Get))
{
<div>
@Html.LabelFor(m => Model.IsMale)
@Html.CheckBoxFor(m => Model.IsMale)
<input type="submit" value="search"/>
</div>
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个Web API,我想出的一个测试是,如果客户端使用物理测试ID进行GET操作(物理测试是我正在寻找的资源)并且找不到物理测试,Web API应返回404状态.
现在,我正在使用moq框架进行测试,我有以下代码:
[TestMethod]
public void then_if_physical_test_not_found_return_not_found_status()
{
var unitOfWork = new Mock<IUnitOfWork>();
var repository = new Mock<IRepository<PhysicalTest>>();
repository.Setup(r => r.FindById(It.IsAny<int>())).Returns();
unitOfWork.Setup(m => m.PhysicalTests).Returns(repository.Object);
var pt = new PhysicalTestResource(unitOfWork.Object);
HttpResponseMessage<PhysicalTest> response = pt.GetPhysicalTest(43);
Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode)
}
Run Code Online (Sandbox Code Playgroud)
我需要Returns()方法来返回一个null对象,如果找不到资源,它将是实际API方法返回的对象.
我尝试在Returns()方法中将null作为参数发送但没有成功.
我有一个重复客户行的表,我想将客户ID添加到我的表行的ID属性,如下所示:
<tr id="row<customer id>"></tr>
Run Code Online (Sandbox Code Playgroud)
我尝试添加此代码:
@foreach(var c in Model) {
<tr id="row@c.id"></tr>
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下输出:
<tr id="row@c.id"></tr>
<tr id="row@c.id"></tr>
Run Code Online (Sandbox Code Playgroud)
等等
但我希望它是:
<tr id="row1"></tr>
<tr id="row2"></tr>
Run Code Online (Sandbox Code Playgroud)
等等
我也尝试添加,<tr>row@{c.id}</tr>但它没有工作..
当与Razor一起使用时,我遇到了Html Helpers的困难.所述助手在MVC 2中与web表单视图引擎一起工作良好.但不是剃须刀.我在运行时得到的错误是:
Compiler Error Message: CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments
Source Error:
Line 1: @using Wingspan.Web.Mvc;
Line 2: @Html.IncrementalMenu(MenuBlock.Site)
Run Code Online (Sandbox Code Playgroud)
展开显示详细编译器输出显示:
d:\...\Views\Shared\MenuTop.cshtml(2,1): error CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments
d:\...\Views\Shared\MenuTop.cshtml(2,7): error CS1503: Argument 1: cannot convert from 'void' to 'System.Web.WebPages.HelperResult'
Run Code Online (Sandbox Code Playgroud)
这向我表明剃刀不喜欢我的助手,IncrementalMenu,返回void(在MVC 2 Web表单引擎视图中工作正常).
我在编译时没有出现任何错误,尽管代码行(@ Html.IncrementalMenu(...))带有以下消息的红色下划线:
Cannot implicitly convert type 'void' to 'object'
Run Code Online (Sandbox Code Playgroud)
IncrementalMenu位于Wingspan.Web.Mvc命名空间中.它的签名如下:
public static void IncrementalMenu(this HtmlHelper html, MenuBlock menuBlock)
{
// Uses an HtmlTextWriter to …Run Code Online (Sandbox Code Playgroud) 我正在与Asp.Net MVC3合作开展一个项目
在我拥有的视图中@Html.ValidationSummary(true),通常它产生
<div class="validation-summary-errors">
<ul>
<li>Something bad Happened!</li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
如何将此ValidationSummary扩展到MyValidationSummary并生成如下所示的Html代码模板:
<div class="notification warning">
<span></span>
<div class="text"> <p>Something bad Happened!</p> </div>
</div>
Run Code Online (Sandbox Code Playgroud) 我正在使用Linq/EF4.1从数据库中提取一些结果,并希望将结果限制为(X)最近的结果.其中X是用户设置的数字.
有没有办法做到这一点?
我现在正在将它们作为一个传递给它,List如果这有助于限制结果集.虽然我可以通过循环来限制它,直到我点击X我只是假设没有传递额外的数据.
以防它是相关的...... C#MVC3项目从SQL Server数据库运行.
是否有一个全面的列表解释了MVC4的所有新功能以及MVC3的所有变化?
(发行说明没有太大帮助)
我想为ASP.NET MVC(与之一起使用Html.EditorFor())中的不同数据类型制作自定义编辑器模板,包括重写现有模板.最终目标是创建一个迷你框架,其中每个编辑器都支持有关被更改的javascript通知,并且我可以向用户显示一条消息,即页面中有未保存的更改.(也许已经存在某些东西?)
我可以找到很多关于这些模板问题的问题,但是我找不到创建它们的教程或手册.他们去哪里?有什么特殊的语法吗?如何选择模板?模板中提供了哪些信息以及如何访问它?等等.
那么 - 在哪里可以找到有关这些模板的所有信息?
有没有办法在我的控制器A视图中呈现来自其他控制器B的局部视图?
编辑:我写了一个仅适用于两个控制器的局部视图,我不想将它复制到两个Views文件夹中.
我希望每次呈现视图时都显示部分视图,而不是在发生某些事情之后.
asp.net-mvc-3 ×10
asp.net-mvc ×6
c# ×4
razor ×4
linq ×1
mocking ×1
moq ×1
performance ×1
templates ×1
wcf-web-api ×1