【问题标题】:Converting many similar Views to Partial Views将许多相似的视图转换为部分视图
【发布时间】:2020-04-06 15:14:24
【问题描述】:

我正在更新一个项目,其中许多不同的视图共享相同的布局,它们之间的内容只有细微的差异。

基本布局如下所示:

@Html.Partial("_HeadingBar")

<div class="panel grid_4">

    <div class="panel-header">
        <span>@ViewBag.SmallHeader</span>
    </div>

    <div class="panel-body">
        <div class="panel-content">
            @* Welcome.cshtml:
            <p>Please use the navigation bar on the side of the site to utilize the features of the site.</p> *@

            @* Login.cshtml:
            @using (Html.BeginForm())
            {
                if (!ViewData.ModelState.IsValid) ...

                <div class="form-row-inline">
                    @Html.LabelFor(m => m.UserName)
                    @Html.TextBoxFor(m => m.UserName)
                    @Html.ValidationMessageFor(m => m.UserName)
                </div>
                ...
                <button type="submit" class="btn btn-success"><i class="icon-lock"></i> Sign In</button>
            } *@

            @* ChangePassword.cshtml:
            @using(Html.BeginForm())
            {
                ...
                @Html.LabelFor(m => m.NewPassword)
                @Html.PasswordFor(m => m.NewPassword)
                @Html.ValidationMessageFor(m => m.NewPassword)
                ...
            } *@


        </div>
    </div>
</div>

我的想法是将每个视图分解为唯一的内容并使其成为局部视图,并将共享部分变为常规视图。

但我不确定这是正确的方法。添加Html.RenderPartial 会导致对服务器的第二次调用,并且需要向控制器添加额外的操作。

我似乎在寻找一个布局,但该网站已经使用了一个布局。

处理此问题的正确/最佳实践方法是什么?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-partialview asp.net-mvc-layout


    【解决方案1】:

    我认为你的做法是正确的。就我个人而言,我将大视图拆分为更小的功能也意味着控制器等更易于阅读和维护。

    包括 HtmlRenderPartial 在内的所有辅助方法都会在收到请求时呈现在服务器端,除非被缓存。所以不应该对服务器进行额外的调用。

    您可以使用多种 html 辅助方法

    没有控制器的部分

    @Html.Partial("~/Views/Shared/Partials/SomePartialViewWithNoModel.cshtml")
    @Html.Partial("~/Views/Shared/Partials/SomePartialViewWithModel.cshtml", Model)
    

    带控制器的零件

    @Html.Action("RenderPartial", "ControllerWithNoModelMethod")
    @Html.Action("RenderPartial", "ControllerWithModelMethod", new { content = Model })
    @Html.RenderAction("RenderPartial", "ControllerWithNoModelMethod")
    @Html.RenderAction("RenderPartial", "ControllerWithModelMethod", new { content = Model })
    

    Action 和 RenderAction 的区别在于 Action 以字符串形式返回结果,而 RenderAction 内联返回结果。 Read more

    【讨论】:

    • 并不是所有的partials都有一个模型,更不用说和他们的模型相同的类型了。
    • 道歉我可能误解了一些问题,这些潜在的部分观点会被多次使用吗?有什么相似之处?还有其他帮助程序,例如部分,可以在布局中定义一个部分并在每个视图中单独填充它。 read more 如果你在read more 之后,你也可以嵌套布局@
    猜你喜欢
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    相关资源
    最近更新 更多