也许这已在其他地方得到解决,但我找不到要搜索的关键字。
在带有Razor视图引擎的ASP.NET MVC中:我有一个视图,它在html的不同部分使用相同的if语句重复多次重复。我想知道是否有一种方法可以将所有这些合并为一个单独的if和设置的占位符值,这样可以节省每个if的位置,如下所示:
<div>@ph1</div>
<div>@ph3</div>
<div>@ph2</div>
@if(true)
{
ph1 = "<div>adfad<div>"
ph2 = "dsfaadfad"
ph3 = Model.Value
}
这是一个愚蠢的例子,但我认为这说明了我的意思。
答案 0 :(得分:2)
你的代码很好。你也可以使用Razor Helper
答案 1 :(得分:1)
@{
MvcHtmlString ph1 = new MvcHtmlString("");
MvcHtmlString ph2 = new MvcHtmlString("");
if (true)
{
ph1 = new MvcHtmlString("<div>" + Model.Value + "<div>");
ph2 = new MvcHtmlString("<div>fsgfdgdfg<div>");
}
}
@ph1
@ph2
再次,愚蠢的用法,但它说得好。
正如其中一个答案中所建议的那样,我所拥有的一个很好的补充就是分配一个帮助器。这样可以更轻松地分配多个语句而无需大量连接。
@helper helper()
{
<span>@Model.Value</span>
<div>dsfadsfasdfdfa</div>
}
@{
MvcHtmlString ph1 = new MvcHtmlString("");
MvcHtmlString ph2 = new MvcHtmlString("");
if (true)
{
ph1 = new MvcHtmlString("<div>" + Model.Value + "<div>");
ph2 = new MvcHtmlString(helper().ToHtmlString());
}
}
@ph1
@ph2
如果有人有更好的想法,我仍然会感兴趣。
答案 2 :(得分:0)
视图通常不应该在视图中有逻辑(尤其是创建html的单个帮助程序)。更好的选择是使用部分视图或显示templtates。
<强>模型/ [控制器] 强>
public class SomeViewModel()
{
//[UIHint("PhoneNumber")]
//public string ph1 { get; set; }
//[UIHint("PhoneNumber")]
//public string ph1 { get; set; }
//[UIHint("PhoneNumber")]
//public string ph1 { get; set; }
//if these all represent phone numbers, it would be ideal to
[UIHint("PhoneNumbers")]
IEnumerable<string> PhoneNumbers { get; set; }
}
<强>视图/ [控制器] 强>
@model SomeViewModel
@Html.DisplayFor(m => m.PhoneNumbers);
查看/共享/ DisplayTemplates / PhoneNumbers.cshtml 强>
@model IENumerable<string>
@foreach (string phoneNumber in Model)
{
<div>@phoneNumber</div>
}