【问题标题】:ASP.NET MVC Razor Content PlaceholdersASP.NET MVC Razor 内容占位符
【发布时间】:2012-04-02 07:55:12
【问题描述】:

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

在带有 Razor 视图引擎的 ASP.NET MVC 中:我有一个视图,它使用相同的 if 语句在 html 的不同部分重复多次呈现。我想知道是否有办法将所有这些 if 合并到一个 if 中,并为占位符设置值,以保存每个 if 所在的位置,如下所示:

<div>@ph1</div>
<div>@ph3</div>
<div>@ph2</div>

@if(true)
{
    ph1 = "<div>adfad<div>"
    ph2 = "dsfaadfad"
    ph3 = Model.Value
}

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

【问题讨论】:

  • 您现在应该有足够的代表来发布您的答案作为答案。你应该这样做。
  • 当您尝试将其发布为答案时,您会收到什么信息?只需 10 个代表即可删除会阻止您发布答案的新用户限制。见stackoverflow.com/privileges

标签: asp.net-mvc razor


【解决方案1】:

【讨论】:

    【解决方案2】:
    @{
        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
    

    如果有人有更好的想法,我仍然会感兴趣。

    【讨论】:

      【解决方案3】:

      视图通常不应该在您的视图中包含逻辑(尤其是创建 html 的单个助手)。更好的选择是使用部分视图或显示模板。

      模型/[控制器]

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

      【讨论】:

      • 这不能解决问题,我个人不使用 DisplayFor,因为通过 HTML 配置 UI 并将 UI 内容排除在我的数据服务之外更容易、更自然。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-17
      • 2013-07-31
      • 2011-11-13
      • 1970-01-01
      相关资源
      最近更新 更多