ASP.NET MVC Razor内容占位符

时间:2012-04-01 04:55:22

标签: asp.net-mvc razor

也许这已在其他地方得到解决,但我找不到要搜索的关键字。

在带有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
}

这是一个愚蠢的例子,但我认为这说明了我的意思。

3 个答案:

答案 0 :(得分:2)

答案 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>
}