使用WebForms视图引擎,我通常会使用三元运算符来处理非常简单的条件,特别是在HTML属性中.例如:
<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>
Run Code Online (Sandbox Code Playgroud)
上面的代码将为<a>标记提供一个类auth或anon取决于用户是否经过身份验证.
Razor视图引擎的等效语法是什么?因为Razor需要HTML标签来"知道"何时跳入和跳出代码和标记,所以我现在仍然坚持以下内容:
@if(User.Identity.IsAuthenticated) { <a class="auth">My link here</a> }
else { <a class="anon">My link here</a> }
Run Code Online (Sandbox Code Playgroud)
温和地说,这很可怕.
我很想做一些喜欢这一点,但我在努力了解如何在剃刀:
<a class="@=User.Identity.IsAuthenticated ? "auth" : "anon";">My link here</a>
Run Code Online (Sandbox Code Playgroud)
-
更新:
与此同时,我创建了这个HtmlHelper:
public static MvcHtmlString Conditional(this HtmlHelper html, Boolean condition, String ifTrue, String ifFalse)
{
return MvcHtmlString.Create(condition ? ifTrue : ifFalse);
}
Run Code Online (Sandbox Code Playgroud)
这可以从Razor这样调用:
<a class="@Html.Conditional(User.Identity.IsAuthenticated, "auth", "anon")">My link here</a>
Run Code Online (Sandbox Code Playgroud)
尽管如此,我希望有一种方法可以使用三元运算符而不会退回到扩展方法中.
尝试在JavaScript中执行以下操作:
parseInt('01'); //equals 1
parseInt('02'); //equals 2
parseInt('03'); //equals 3
parseInt('04'); //equals 4
parseInt('05'); //equals 5
parseInt('06'); //equals 6
parseInt('07'); //equals 7
parseInt('08'); //equals 0 !!
parseInt('09'); //equals 0 !!
Run Code Online (Sandbox Code Playgroud)
我刚刚学会了JavaScript认为前导零指示八进制整数的困难方式,并且由于没有"8"或"9"在base-8中,该函数返回零.无论喜欢与否,这都是设计的.
解决方法有哪些?
注意:为了完整起见,我即将发布解决方案,但这是我讨厌的解决方案,所以请发布其他/更好的答案.
更新:
我正在使用_viewstart.cshtml自动为我的视图分配相同的Razor布局.
它是我的Views文件夹根目录中的一个死的简单文件,如下所示:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
Run Code Online (Sandbox Code Playgroud)
这比将@Layout指令添加到每个视图更干.
但是,这对Razor 局部视图造成了问题,因为它们运行_viewstart.cshtml的内容,因此错误地为自己分配了一个布局,这使得它们不再是局部的.
这是一个假设项目,显示_viewstart.cshtml文件,共享_layout.shtml文件和部分视图("AnonBar.cshtml").
目前,我解决这个问题的方法是在每个局部视图中添加以下行:
@{
Layout = "";
}
Run Code Online (Sandbox Code Playgroud)
这似乎是在Razor中将视图表示为部分视图的错误方式.(请注意,与Web窗体视图引擎不同,部分视图的文件扩展名相同.)
我考虑的其他选项,但更糟糕的是:
这是Razor视图引擎团队仍在充实的东西,还是我错过了一个基本概念?
在System.Web.Security.FormsAuthentication的SignOut方法中,ASP.NET团队选择通过将到期日期设置为"1999年10月12日"来使FormsAuth cookie过期.
HttpCookie cookie = new HttpCookie(FormsCookieName, str);
cookie.HttpOnly = true;
cookie.Path = _FormsCookiePath;
cookie.Expires = new DateTime(0x7cf, 10, 12);
Run Code Online (Sandbox Code Playgroud)
1999年10月12日有什么意义?这是一个内幕笑话,还是有一些有效的理由将你的cookie过期设置到该特定日期?
编辑: 下面的理论很有趣,但它们只是猜测.由于Phil, Scott和ASP.NET团队的其他成员都在StackOverflow上,我认为提供赏金会很有趣.希望有人可以追踪原始开发人员并获得权威答案.
获奖者: Scott Hanselman将这一个升级到ScottGu.我真的希望有某种超级秘密的Illuminati-esque意思,但看起来它只是旧的"一年前"的伎俩.
在SQL Server中,如何将DATETIME"置于"第二/分钟/小时/日/年?
假设我的日期是2008-09-17 12:56:53.430,那么地板的输出应该是:
我试图在Windows 7上的IIS下运行ASP.NET MVC 2 Web应用程序,但是我收到403.14错误.以下是重现的步骤:
http://localhost:{random_port}/并且页面将正确呈现.http://localhost/MvcApplication1/和IIS错误HTTP Error 403.14 - Forbidden The Web server is configured to not list the contents of this directory..很明显,无论出于何种原因,ASP.NET路由都无法正常工作.
我已经想过并尝试过的事情:
aspnet_regiis -i在v4.0.30319目录中.这是最神奇的部分 - 这是在一台刚刚建造的机器上.Windows 7 x64 Ultimate的新副本,Visual Studio 2010 Premium的全新安装,没有其他网站,也没有执行其他工作.
还有什么我可以尝试的吗?
将Visual Studio设置为使用本地IIS Web服务器http://i41.tinypic.com/11j176b.png
是否有可能按数据库分类CPU利用率?
我理想地为SQL服务器寻找任务管理器类型接口,但我不想查看每个PID(如taskmgr)或每个SPID(如spwho2k5)的CPU利用率,而是想查看每个数据库的总CPU利用率.假设一个SQL实例.
我意识到可以编写工具来收集这些数据并对其进行报告,但我想知道是否有任何工具可以让我看到哪些数据库对sqlservr.exeCPU负载贡献最大的实时视图.
我正在搜索与此查询等效的Linq-to-SQL:
SELECT
[cnt]=COUNT(*),
[colB]=SUM(colB),
[colC]=SUM(colC),
[colD]=SUM(colD)
FROM myTable
Run Code Online (Sandbox Code Playgroud)
这是一个没有分组的聚合.我似乎无法找到任何方法,只发出四个单独的查询(一个Count和三个Sum).有任何想法吗?
razor ×2
sql-server ×2
.net ×1
asp.net ×1
cookies ×1
grep ×1
iis ×1
iis-7.5 ×1
integer ×1
javascript ×1
linq-to-sql ×1
monitoring ×1
octal ×1
open-source ×1
phonetics ×1
resources ×1
t-sql ×1
windows ×1