GVKun编程网logo

在Spring MVC中有条件地渲染HTML(spring mvc实现)

27

对于想了解在SpringMVC中有条件地渲染HTML的读者,本文将提供新的信息,我们将详细介绍springmvc实现,并且为您提供关于asp.net-mvc–什么是HtmlHelper渲染htmlAt

对于想了解在Spring MVC中有条件地渲染HTML的读者,本文将提供新的信息,我们将详细介绍spring mvc实现,并且为您提供关于asp.net-mvc – 什么是HtmlHelper渲染htmlAttributes对象的方法?、asp.net-mvc – 如果在@ Html.DisplayFor中有条件、asp.net-mvc – 我可以在_Layout.cshtml中有条件地渲染部分视图吗?、asp.net-mvc – 有条件地在webgrid中显示图像 – mvc 3的有价值信息。

本文目录一览:

在Spring MVC中有条件地渲染HTML(spring mvc实现)

在Spring MVC中有条件地渲染HTML(spring mvc实现)

是否有任何标签可以有条件地呈现HTML块。例如:Struts具有:

<logic:present name="someForm" property="someProperty">    //Code block</logic:present>

例如:JSF具有:

<h:panelGrid rendered="#{not empty someList}">    //Some code block</h:panelGrid>

spring MVC中有类似的东西吗?

答案1

小编典典

普通的旧JSTL可以拯救您!

Spring MVC的优点在于,它不会像其他框架那样添加大量的冗余标签库。您现在可以始终依靠JSTL进行此类检查,这是JSP规范的一部分。

<c:if test="${not empty someList}"></c:if>

asp.net-mvc – 什么是HtmlHelper渲染htmlAttributes对象的方法?

asp.net-mvc – 什么是HtmlHelper渲染htmlAttributes对象的方法?

我正在构建一个编辑器模板,它将接受htmlAttributes对象.

示例很简单.

在主视图中我有类似的东西

@Html.EditorFor(Function(x) x.someProperty,New With {.htmlAttributes = New With {.}}).

在编辑模板中,我需要编写class =“form-control”属性.

如果在模板中我使用类似@Html.TextBoxFor(Function(x)x,ViewData(“htmlAttributes”))的东西,那么一切都还可以.但是如果我手动构建一个标签,我就无法输出htmlAttributes,即我构建< input type =“text”{htmlAttributes应该在这里} />

是否有任何公共方法可以正确地在标记内呈现HTML属性?

解决方法

我不确定你到底在找什么.传统上,编辑器模板只会传递htmlAttributes.例如:

视图

@Html.EditorFor(m => m.FooString,new { htmlAttributes = new { @} })

String.cshtml

@Html.TextBox("",ViewData.TemplateInfo.FormattedModelValue.ToString(),ViewData["htmlAttributes"])

如果您正在询问如何执行类似设置默认值的操作,然后可以通过传递htmlAttributes来覆盖或添加默认值.那么,你在那里几乎就是你自己. MVC中没有任何东西可以帮助你(至少完全没有).但是,我确实编写了自己的HtmlHelper扩展来处理这个问题.我实际上写了一个blog post来解释它的作用以及如何使用它.我建议你检查一下,但我会在这里发布代码以保证完整性.

using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using System.Web.Routing;

public static partial class HtmlHelperExtensions
{
    public static IDictionary<string,object> MergeHtmlAttributes(this HtmlHelper helper,object htmlAttributesObject,object defaultHtmlAttributesObject)
    {
        var concatKeys = new string[] { "class" };

        var htmlAttributesDict = htmlAttributesObject as IDictionary<string,object>;
        var defaultHtmlAttributesDict = defaultHtmlAttributesObject as IDictionary<string,object>;

        RouteValueDictionary htmlAttributes = (htmlAttributesDict != null)
            ? new RouteValueDictionary(htmlAttributesDict)
            : HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributesObject);
        RouteValueDictionary defaultHtmlAttributes = (defaultHtmlAttributesDict != null)
            ? new RouteValueDictionary(defaultHtmlAttributesDict)
            : HtmlHelper.AnonymousObjectToHtmlAttributes(defaultHtmlAttributesObject);

        foreach (var item in htmlAttributes)
        {
            if (concatKeys.Contains(item.Key))
            {
                defaultHtmlAttributes[item.Key] = (defaultHtmlAttributes[item.Key] != null)
                    ? string.Format("{0} {1}",defaultHtmlAttributes[item.Key],item.Value)
                    : item.Value;
            }
            else
            {
                defaultHtmlAttributes[item.Key] = item.Value;
            }
        }

        return defaultHtmlAttributes;
    }
}

然后,在您的编辑器模板中(此示例中为Date.cshtml):

@{
    var defaultHtmlAttributesObject = new { type = "date",@};
    var htmlAttributesObject = ViewData["htmlAttributes"] ?? new { };
    var htmlAttributes = Html.MergeHtmlAttributes(htmlAttributesObject,defaultHtmlAttributesObject);
}
@Html.TextBox("",htmlAttributes)

UPDATE

I cannot use @Html.TextBox,but need to write manually <input type="text" {htmlAttributes should be here} />

为什么?帮助器版本没有任何你无法做到的事情.但是,如果你坚持走这条路,那么你将很难用Razor做这件事.假设您实际上可以在没有Razor语法错误的情况下编写它,那么代码将变得虚拟不可读.我建议在纯C#中使用TagBuilder和/或StringBuilder来构造一个字符串,然后确保返回/设置一个MvcHtmlString类型的变量:

var output = new MvcHtmlString(builder.ToString());

但是,如果你走得那么远,它会否定使用编辑器模板的目的,除非你试图覆盖其中一个默认的编辑器模板.无论如何,我建议您只创建自己的HtmlHelper扩展,然后直接在视图中使用它或在编辑器模板中使用它.

asp.net-mvc – 如果在@ Html.DisplayFor中有条件

asp.net-mvc – 如果在@ Html.DisplayFor中有条件

我试图根据statusid表中的数据显示不同的消息.比如说,如果我的statusid是1120,那么我想显示“PASS”,但我正在努力使用正确的语法.

如果statusid = 1120则“通过”.

这是我显示statusid的代码:

@Html.displayFor(modelItem => item.statusid)

任何的想法?

解决方法

创建一个包含所需属性的对象

SomeObject.statusId
SomeObject.message

@Html.displayFor(modelItem => item.someObjectInstance)

这样做可以让你在视图外添加代码和逻辑,这通常是推荐的.

asp.net-mvc – 我可以在_Layout.cshtml中有条件地渲染部分视图吗?

asp.net-mvc – 我可以在_Layout.cshtml中有条件地渲染部分视图吗?

假设我有一个_Layout.cshtml,我在其中渲染左侧边栏,这对我网站的每个页面都是通用的.
沿着这些方向的东西 – 例如菜单

<div id="left-sidebar">
    @Html.Action("_MenuView","LeftSideMenu")
</div>

我想要的一个功能是添加另一个局部视图,但只在网站的某些部分显示.

例如,在博客部分中,我可能想要显示帖子类别列表或帖子的树视图.

<div id="left-sidebar">
    @Html.Action("_MenuView","LeftSideMenu")

    @if ("???")
    {
        @Html.Action("_BlogTreeView","BlogEntries")
    }
</div>

我怎么能这样做?我知道如果我正在渲染的视图由BlogController返回,我想显示“_BlogTreeView”…我从哪里开始?

解决方法

在您的布局中,添加此部分

@RenderSection("blogEntries",false)

然后在每个要显示局部视图的视图中添加以下内容:

@section blogEntries {
    @Html.Action("_BlogTreeView","BlogEntries")
}

asp.net-mvc – 有条件地在webgrid中显示图像 – mvc 3

asp.net-mvc – 有条件地在webgrid中显示图像 – mvc 3

在我的网格网格中,我需要根据值显示图像.代码如下
@model TraktorumMVC.Models.ManagePhotos
@{
    ViewBag.Title = "ManagePhotos";
    Layout = "~/Views/Shared/_Layout.cshtml";
    var grid = new WebGrid(Model.AdPhotos);
}


    @grid.GetHtml(
       displayHeader: false,columns: grid.Columns(
             grid.Column(format: (item) =>
                 {
                     if (item.IsMainPreview == true)
                     {
                         return @<text><img src="@Url.Content("~/Content/images/preview-photo.gif")" alt="Image "/></text>;
                     }
                     else
                     {
                         return @<text><img src="@Url.Content("~/Content/images/non-preview-photo.gif")" alt="Image "/></text>;
                     }
                 }
                ),grid.Column(format: (item) => Html.ActionLink("Remove Photo","RemovePhoto","Images",new { photoID = @item.Id },new { @}))
         ));

我不知道如果在webgrid我如何使用.我刚刚尝试,它不工作.getting以下错误

The best overloaded method match for 'System.Web.Helpers.WebGrid.Column(string,string,System.Func<dynamic,object>,bool)' has some invalid arguments

解决方法

在thegrid.Column方法的格式参数中,您将放置一个lambda表达式,以便当然可以使用if表达式.但问题是您在Razor中的“代码模式”中不能使用@来输出HTML.所以你需要将图像标签创建包装成一个HtmlHelper(像内置的Html.ActionLink有很多 examples)或使用HTML.Raw方法来返回HTML:
@grid.GetHtml(
    displayHeader: false,columns: grid.Columns(
            grid.Column(format: (item) =>
                {
                    if (item.IsMainPreview == true)
                    {
                        return Html.Raw(string.Format("<text><img src=\"{0}\" alt=\"Image\"/></text>",Url.Content("~/Content/images/preview-photo.gif")));
                    }
                    else
                    {
                        return Html.Raw(string.Format("<text><img src=\"{0}\" alt=\"Image\"/></text>",Url.Content("~/Content/images/non-preview-photo.gif")));                         
                    }
                }
            ),new { photoID = item.Id },new { @}))
        ));

同样在最后一行,而不是新的{photoID = @ item.Id},您应该写新的{photoID = item.Id}
要了解更多关于剃须刀的详细tutorial.

关于在Spring MVC中有条件地渲染HTMLspring mvc实现的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于asp.net-mvc – 什么是HtmlHelper渲染htmlAttributes对象的方法?、asp.net-mvc – 如果在@ Html.DisplayFor中有条件、asp.net-mvc – 我可以在_Layout.cshtml中有条件地渲染部分视图吗?、asp.net-mvc – 有条件地在webgrid中显示图像 – mvc 3的相关知识,请在本站寻找。

本文标签: