【发布时间】:2012-10-23 20:17:06
【问题描述】:
我仍然对 MVC 感兴趣,并且在一个使用大量“图块”(您知道,通常的“带有标准化标题和一些内容的矩形部分”模式)用于视觉显示的网站上工作。没有什么花哨的,只是一种将内容放入框中以便于布局和导航的方法。目前,“瓷砖”(我的术语)是这样构建的:
<div class="tile">
<div class="tile-header">
<h2>Title</h2>
</div>
<div class="tile-body">
(arbitrary content)
</div>
</div>
注意:“任意内容”是指任何内容,无论是静态的还是动态的,所以不一定可以插入变量并传递给帮助程序,我需要更多的灵活性。 p>
我的问题是,封装此模式并使其更容易/更具表现力地从代码调用的最佳方法是什么?我知道部分视图,但我如何将任意正文内容传递给部分视图? (这可能只是我对 MVC 展示的有限了解)
我尝试像这样构建 Razor 助手:
@Tile.Begin("Title")
(arbitrary content)
@Tile.End()
但是 Razor 窒息,因为我不能包含“tile-body”关闭 div。 (如果我这样做了,我必须将正文内容作为字符串变量传递,这并不总是可行的)
我可以看到这样的东西:
@using (Tile.Begin("Title")) {
(arbitrary content)
}
这对我来说似乎是最优雅的,虽然不像 @Tile.Begin() 和 @Tile.End() 调用那么容易扫描。据我了解,我必须创建一个类并实现 IDisposable,但是当我尝试从帮助类返回一串原始 HTML 标记时,它只是将编码的标记语法写入屏幕,所以我假设我会遇到同样的问题?
感谢您的任何建议。 :)
【问题讨论】:
-
您说的是固定(静态)图块吗?还是动态(数据驱动)图块?也就是说,您是想在 .cshtml 文件中定义图块,还是想在代码中构建时间?
-
其实两者都有。例如,现在我正在构建一个本质上是列表集合的屏幕,每个列表迭代一个模型集合。这些模型附加到传递给视图的视图模型。所以本质上,视图是获取每个模型集合并为它构建一个带有链接的图块。这个我可以用一个帮手包起来,当然。但是另一个页面具有与静态内容相同的平铺格式,我不能将其作为变量传入。我宁愿有 一个 中心位置来维护瓷砖的布局,因为那是干燥的,但我只是不知道如何到达那里。谢谢。
-
实际上不,我也不能轻易地将这个包装成一个助手,因为并非所有模型都有相同的方法调用。我想我可以在每个模型上重载 ToString() ,除非那是反模式?