如何根据在消费页面中定义的值在布局中呈现html内容?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (69)

是否有一种方法可以在MVC页面中定义一个值或节,该值或节是由布局文件使用的,以在布局文件中显示可选内容。

_Layout.cshtml

@if (someValueToCheck)
{
    //HTML content that will render on every page requiring this content
}

Somepage.cshtml

@{
   // set someValueToCheck to notify the Layout to render content
}
提问于
用户回答回答于

可以试试:

_Layout.cshtml

@if(IsSectionDefined("optionalSection")){
  <div class="optional-content">
       @RenderSection(commonBodyContainer)
  </div>    
} 

@RenderBody()

renderOptionalContent.cshtml

@section optionalSection 
{ 
  <div>Content for opional-content</div>
}

如果你不需要呈现从视图传递到布局的内容,我更愿意创建一个强类型的描述性方法来执行逻辑并将值存储在视图数据中:

internal static class WebViewPageExtensions
{
    const string ViewDataContentBlahKey = "ContentBlahKey";

    public static void SetShowContentBlah(this WebViewPage instance
       ,bool value)
    {
      instance.ViewData[ViewDataContentBlahKey] = value;
    }

    public static void GetShowContentBlah(this WebViewPage instance)
    {
      // if it's not set to false, it will be null
      var result = instance.ViewData[ViewDataContentBlahKey] as bool?;
      return result.HasValue && result.Value;
    }
}

_Layout.cshtml

@if(GetShowContentBlah())){
  <div class="optional-content">
    My Optional Content
  </div>    
} 

renderOptionalContent.cshtml

@{ SetShowContentBlah(true); }
用户回答回答于

我认为这是不可能的,最接近的是定义一个几乎相同的布局文件,可以试试:

_Layout2.cshtml

@RenderPage("_Layout")

<div class="common-body-container">
    <div class="common-body-container-header">
        <div class="common-body-container-page-title">blah blah!</div>
    </div>
    <div class="common-body-container-contents">
        @RenderBody()
    </div>
</div>

这样,我就不会重新细化几乎相同的布局文件,也不会重复形成每个页面上容器的HTML标记。

扫码关注云+社区

领取腾讯云代金券