我有一个显示项目列表的视图。我不想在网格中显示项目,而是每页显示4个项目,每个项目都有一个图像和多个属性,以独特的布局显示。
所以,我希望foreach遍历这些项目,并且每个项目都会显示在div中。我可以将所有代码放在循环中,但我希望有一个自定义的html帮助扩展来执行此操作。
我想出了这个,
public static MvcHtmlString DisplayViewerFor(this HtmlHelper helper, TestModel model, bool rightAligned = true) {
if (model == null) {
model = new TestModel();
}
var outterDiv = new TagBuilder("div");
outterDiv.AddCssClass(rightAligned ? "item-display-right" : "item-display");
var image = new TagBuilder("image");
image.Attributes.Add("src", "Item/GetImage/" + model.ItemName);
image.Attributes.Add("height", "150");
var editorLabel = new TagBuilder("div");
editorLabel.AddCssClass("editor-label");
//LOOKING TO ADD CODE LIKE THIS HERE
var labelContent= html.LabelFor({my model property here})
editorLabel.InnerHtml += labelContent;
//END OF ADD
return new MvcHtmlString(outterDiv.ToString(TagRenderMode.EndTag));
}
在我上面的方法中,我需要显示更多的值,我想使用Html.LabelFor和Html.DisplayFor助手,但方法不可用,我不知道要传递给什么他们如果是的话。
我不确定这是否可能,但我想我会问。
修改 我正在尝试使用html.LabelFor。请参阅上面我更新过的代码,添加这两行。
var labelContent= html.LabelFor({my model property here})
editorLabel.InnerHtml += labelContent;
您可以看到上面的代码。
编辑2
以下是此助手的计划用途,其中包含愚蠢的视图。
@model TestItemDisplayList
@ { ViewBag.Title =“Items”; Layout =“〜/ Views / Shared / _Layout.cshtml”; }
@foreach(@ model.Items中的var项目){ @ Html.DisplayViewerFor(项目) }
答案 0 :(得分:4)
您可以使用Html.DisplayFor方法呈现DisplayTemplate。该方法的一个过载是指定要使用的模板。您可以将页面代码修改为:
网页:强>
@model TestItemDisplayList
@{ ViewBag.Title = "Items"; Layout = "~/Views/Shared/_Layout.cshtml"; }
@Html.DisplayFor(model => Model,"TestItemDisplayList")
显示TestItemDisplayList的模板
@model TestItemDisplayList
@* You could limit this loop to the first 4 items *@
@foreach(var item in model.Items){ @Html.DisplayFor(item => item) }
显示TestModel的模板
@model TestModel
<div class="item-display">
<img src="@Url.Action("GetImage", "Image", new { id = Model.ItemName})" height="150"/>
<div class="editor-label">@Html.LabelFor(model => model.PropertyHere)</div>
</div>
我假设您的图片网址使用{controller} / {action} / {id}的默认路由,因此我使用了Url.Action并指定了您的ID。
你也可以使用DisplayTemplate for“TestItemDisplayList”并将该代码移入你的页面,但我不清楚你是否想在其中添加逻辑以限制页数。