我希望使用C#和Razor语法来检查是否已设置cookie。如果已设置,我想显示
<h2> Cookie set </h2>.
如果没有,我想显示
<h2>Cookie not set</h2>
所以,为了回顾一些事情,我设置了这个cookie:
//set cookie
HttpCookie cookie = Request.Cookies.Get("stackOverflowCookie");
if(cookie == null) {
cookie = new HttpCookie("stackOverflowCookie");
cookie.Value = "Hi guys!";
cookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(cookie);
使用Razor,在语法上,渲染我想要的东西的最佳方法是什么?无论我尝试什么都会导致编译错误:
@{
if(Request.Cookies["stackOverflowCookie"] == null){
//some other logic is here in my actual code, so an inline statement is not sufficient
<h2> Cookie set </h2>
@}
@{ else {
<h2> Cookie not set </h2>
@}
显然这看起来很可怕,而且不起作用。它确实显示了我想要的功能。实现此功能的最佳方法是什么?
答案 0 :(得分:1)
如果你的if语句逻辑长于单行允许,你只需在代码块中设置一个变量:
@{
var isCookieSet = Request.Cookies["stackOverflowCookie"] == null && otherConditions;
}
然后你的剃刀代码看起来像这样:
@if (isCookieSet) {
<h2>Cookie set</h2>
} else {
<h2>Cookie not set</h2>
}
答案 1 :(得分:1)
请记住要小心将逻辑放在用户界面(即视图)中。
您可能希望考虑编辑View-Model以包含cookie的值,并使用简单的IF语句根据此变量显示不同的UI:
@if(model.CookieProperty != null) {
<h2>Cookie is set</h2>
} else {
<h2>Cookie is not set</h2>
}
然后让控制器读取cookie,并设置View-Model属性:
model.CookieProperty = Request.Cookies["cookieName"];
这样做的好处是:
答案 2 :(得分:0)
您可以尝试类似
的内容@if(Request.Cookies["stackOverflowCookie"] == null) {
<h2> Cookie set </h2>
} else {
<h2> Cookie not set </h2>
}