下面的代码看起来不干净.有什么改进代码的建议吗?
<li @if(ViewData["pagename"].ToString()=="Business details"){ <text>class="active" </text> } >
<a @if(ViewData["pagename"].ToString()=="Business details"){ <text>style="color: white; background-color: #08C; border: 1px solid #08C;" </text> }
href="@Url.Action("BusinessDetails", "Business")">Business Details</a>
</li>
<li @if (ViewData["pagename"].ToString() == "Booking policies"){ <text>class="active"</text> }>
<a @if (ViewData["pagename"].ToString() == "Booking policies")
{ <text>style="color: white; background-color: #08C; border: 1px solid #08C;" </text> }
href="@Url.Action("BookingPolicies", "Business")">Booking policies</a>
</li>
Run Code Online (Sandbox Code Playgroud) 我有一个MVC4站点,(作为隐藏表单的一部分):
<input name="somefield" type="hidden" value="@ViewBag.Test"/>
Run Code Online (Sandbox Code Playgroud)
价值ViewBag.Test是true.表单字段将发布到表单的输入参数:
public ActionResult SomeAction(bool somefield = false, ...)
Run Code Online (Sandbox Code Playgroud)
但somefield总是如此false.经过调查,我发现源代码有:
<input name="somefield" type="hidden" value="value"/>
Run Code Online (Sandbox Code Playgroud)
但是,我知道这曾经奏效.发生了什么事,我该怎么办?
我现在已经习惯了剃刀,但我不明白为什么以下语法是正确的?
<li @(active ? "class=active" : "")>
@Html.ActionLink(item.Text, item.TargetAction, Model.Controller)
</li>
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,我有条件地应用了一个类(我用这种方式编写它,因此如果bool active == false则不生成类标记).
我无法理解的是,为什么这会产生正确的报价给出:
<li class="active"><a href="/">Home</a></li>
<a href="/">Home</a>
</li>
Run Code Online (Sandbox Code Playgroud)
不知何故,它是神奇地整理引用,但我在剃刀的文章中找不到任何参考,以表明这是预期的,所以我想知道它是否依赖于破碎的行为.如果我在单词'active'周围的字符串中添加单引号或双引号,就像你想要的那样,如果你想要html,我最终得到:
<li class="'active'">
<a href="/">Home</a>
</li>
Run Code Online (Sandbox Code Playgroud)
要么
<li class="active">
<a href="/">Home</a>
</li>
Run Code Online (Sandbox Code Playgroud)
为什么它以这种方式工作,并且我的代码是正确的(而不是简单的功能)?
我从我的控制器传递一个变量ViewBag.crimeRef并使用它来显示一个工作正常的消息:
@if(ViewBag.crimeRef != null)
{
<div class="alert alert-dismissable alert-danger">
<button type="button" class="close" data-dismiss="alert">×</button>
Sorry, there are no matching results for the crime reference <strong>@ViewBag.crimeRef</strong>. Please try searching again.
</div>
}
Run Code Online (Sandbox Code Playgroud)
我想我也可以使用相同的方法来填充输入的值,但是我收到了一个CS1002: ; expected错误:
<input type="text" class="form-control" maxlength="11" id="crimeRef" name="crimeRef" placeholder="Crime reference"
@if(ViewBag.crimeRef != null) { value="@ViewBag.crimeRef" }>
Run Code Online (Sandbox Code Playgroud)
无论如何我可以使用ViewBag变量填充输入的值吗?
非常感谢
我正在使用Html助手创建一个复选框.在某些情况下,我想将该disabled属性添加到htmlAttribute对象中.我有以下代码:
@if (Model.IsAuthorized)
{
@Html.CheckBoxFor(x => @Model.Property, new { @class = "input-class" })
}
else
{
@Html.CheckBoxFor(x => @Model.Property, new { @class = "input-class", @disabled = "disabled" })
}
Run Code Online (Sandbox Code Playgroud)
我想让这段代码更简洁.有没有办法在一行中有条件地添加某些html属性/没有块条件?
考虑这个例子:
<input type="checkbox" @if (flag) { @: checked } />
Run Code Online (Sandbox Code Playgroud)
问题在于} />Razor引擎将其视为输出字符串的一部分.
我试过用括号但没有运气.
有没有办法@:在同一行中终止运算符,或者我必须将它拆分为其他行/使用三元运算符?
如果值为true,我的请求的一个非常常见的用例可以是添加一个类:
<div class='container @(active ? "active")'/>
Run Code Online (Sandbox Code Playgroud)
因此,如果:三元运算符不存在,它会将其视为一元运算if符,但这只是一个愿望......
这是我对C#UserVoice的建议.
我有一个MVC应用程序,显示Windows部署的进度.在我看来,我有一个表格,显示每个部署的当前状态.其中一个属性是最后一次部署签入('CurrentTime').我想改变如果CurrentTime超过4小时前的风格.
在我的MVC视图中,我试图做这样的事情:
@foreach (var item in Model)
{
if(item.CurrentTime < DateTime.Now.AddHours(-4))
{
@:<tr class="warning">
}
else
{
@:<tr>
}
Run Code Online (Sandbox Code Playgroud)
这不起作用.我收到一个解析器错误:
遇到没有匹配开始标记的结束标记"tr".您的开始/结束标签是否正确平衡?
什么是简单的方法(我只是学习MVC /网络编程)来实现这一目标?
asp.net-mvc ×5
razor ×5
asp.net ×3
c# ×3
html-helper ×1
if-statement ×1
razorengine ×1
view ×1
viewbag ×1