【问题标题】:Asp.Net MVC - Open HTML ControlsAsp.Net MVC - 打开 HTML 控件
【发布时间】:2010-06-24 16:54:43
【问题描述】:

我是 asp.net mvc 的新手。我希望为重用 html 创建一些控件。例如,我有一个复杂的 HTML 框:

<div class="Box">
    <div class="Top"></div>
    <div class="Content">
        <div style="padding:10px;">
        [CONTENT GOES HERE]
        </div>
    </div>
    <div class="Bottom"></div>
</div>

以前使用网络表单,我可以通过从 WebControl 继承并覆盖 Render 来重用它。但是如何在 MVC 中实现呢?

盒子的内容当然可以是任何东西。例如其他盒子。

【问题讨论】:

    标签: asp.net html asp.net-mvc controls


    【解决方案1】:

    最简单的方法:使用 UserControl

    <%@ Control Language="VB" Inherits="System.Web.Mvc.ViewUserControl" %>
    <div class="Box">
        <div class="Top"></div>
        <div class="Content">
            <div style="padding:10px;">
            <%= Model.Content %>
            </div>
        </div>
        <div class="Bottom"></div>
    </div>
    

    然后调用用户控件

    <% Html.RenderPartial("NiceBox", New with {.Content = "The real content goes here"})%>
    

    【讨论】:

    • 如果我想把整个表格放在盒子里,这个方法有用吗?我完全清楚“with {.Content...”部分。
    • 哦,我明白你的意思了。这种方法对结构化内容更有用。你仍然可以在 MVC 中使用 WebControls,只要它们不依赖于 PostBackViewState
    • 所以我可以像在 webform 中一样将 webcontrol 实现到视图中吗? 东西放在这里 ?
    【解决方案2】:

    下面是一种将其构建为 HtmlHelper 扩展方法的示例:

        public static string Box(this HtmlHelper helper, string content)
        {
            var builder = new StringBuilder();
            builder.Append("<div class=\"Box\" .......... );
    
            if (!String.IsNullOrEmpty(content))
            {
                builder.Append(content)
            }
    
            return builder.ToString();    
        }
    

    在你看来:

      <%= Html.Box(contentString) %>
    

    您的其他选择是将其创建为局部视图 (.ascx) 并将其传递给包含您要呈现的内容的 ViewModel 类。从“内容可以是任何东西”的要求来看,HtmlHelper 扩展对您来说可能更灵活。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多