2012-03-14 129 views
0

有没有比@if @else更好的方法来改变用Razor视图构建的cshtml页面中html元素的一些属性(如disabled,value,class等)?MVC3 Razor查看优化

+0

好i'don't知道如何避免usinf “的if/else”。也许短if/else语法将帮助你@(true?“enabled”:“disabled”)。你可以创建助手或计数的其他方式属性,控制器 – 2012-03-14 21:48:52

回答

0

MVC 4 /剃刀V2将有一些改进:

条件属性渲染

如果您有可能为空,在过去的你需要做一个空检查,以避免写出一个空的属性,像这样的属性:

<div @{if (myClass != null) { <text>class="@myClass"</text> } }>Content</div> 

现在剃刀能够处理自动地,所以你可以只写出属性。如果它为空,则该属性不会被写入:

<div class="@myClass">Content</div> 

所以,如果@myClassnull,输出仅仅是这样的:

<div>Content</div> 

Jon Galloway's blog

+0

那会是惊人的功能..喜欢它:) – Aman 2012-03-15 22:49:55

0

我不知道为什么你认为有剃刀@if任何性能缺陷,但你可以用你的ViewModelViewBag此:

<input type="text" value="@(ViewBag.TheValue)" /> 

但对于最佳实践,不要混用服务器端逻辑与演示文稿。 “单独的担忧”


更新(我干了什么意思“单独的担忧”):

这意味着视图应该包含尽可能多的,因为它可以,HTML标记和HTML助手(这只是帮助你写标记)。不要把视图内的逻辑。如果它让你把代码放在里面,不要重复使用相同的视图。

+0

值我想整理一下代码..我需要使用多个并嵌套如果已经产生矛盾的元素“ID”以及else语句.. – Aman 2012-03-14 21:50:01

+1

@ user1270199。显示一些**真实的**代码。它看起来像你用错误的方式使用剃须刀! – gdoron 2012-03-14 21:50:53

+0

当u说:“别用表现混合服务器端逻辑”并不意味着使用Viewbag.Value所有动态属性? – Aman 2012-03-14 21:58:11

0

您可以在视图模型将它们作为真/假值或字符串值。 例如 -

  • 任何需要动态设置为启用或禁用 - 您可以创建一个布尔
  • 任何HTML类,它是在运行时设置一个字符串,可以作为一个字符串变量传递你的视图模型。

这将清理所有@if的你的剃须刀意见else语句

+0

HMM的听起来像interesting- html.helpers可以更加有趣(I所看到的在谷歌;)) – Aman 2012-03-14 21:59:09

+0

我不知道你是如何计划使用HTML辅助用于此目的 – MoXplod 2012-03-15 04:08:08

+0

喜欢使用MvcHtmlString StatusClass选择基于condition..I一个perticular类MvcHtmlString extention methodes我不是很方便,虽然:( – Aman 2012-03-15 09:01:26

2

您可以使用内嵌条件语句,以及:

<input type="text" value="@(true == true ? "one value" : "another value")" />