以下是我的视图中用户评分显示的代码:
<div class="leftBlock">
<div class="leftBlockHead">
<div class="textHead">
<b>Users rating</b>
</div>
</div>
<div id="leftBlockContent">
@foreach (var user in Model)
{
<div class="list">
@user.Login @user.Rating
</div>
}
</div>
</div>
问题是我对其他一些块使用相同的html结构。所以我不想重复这段代码,我需要某种模板,它将块标题和@foreach作为参数。有哪些方法可以实现它?
答案 0 :(得分:1)
您可以查看创建HTMLHelper类扩展方法来进行此类渲染 您还可以使用HTMLHelper RenderPartial方法。为此,您需要定义
答案 1 :(得分:0)
我会继续编写一个自定义的html助手来做这件事...看起来像
@helper YourHelper(Model model){
**DO YOUR FOREACH STUFF IN HERE**
<div class="leftBlock">
<div class="leftBlockHead">
<div class="textHead">
<b>model.Title</b>
</div>
</div>
<div id="leftBlockContent">
@Html.Raw(model.Content)
</div>
</div>
}
然后你会用它.. @ YourHelper(model)
答案 2 :(得分:0)
我终于使用了Templated Razor Delegates。
以下是我的部分观点:
@model LeftColumnBlockViewModel
<div class="levo_blok1">
<div class="levo_blok1_head">
<div class="text_head">
@Model.Title
</div>
</div>
<div id="levo_blok1_content">
@Model.Content(null)
</div>
</div>
以下是它的视图模型:
public class LeftColumnBlockViewModel
{
public string Title { get; set; }
public Func<dynamic, object> Content { get; set; }
public LeftColumnBlockViewModel(string title, Func<dynamic, object> content)
{
Title = title;
Content = content;
}
}
以下是用法:
@Html.Partial(MVC.Shared.Views._LeftColumnBlock,
new LeftColumnBlockViewModel(
Battles.CurrentBattles,
@<text>
@foreach (var currentBattle in Model.CurrentBattlesViewModels)
{
<div class="list">
@currentBattle.Budget / @currentBattle.BetLimit% / @currentBattle.StartDate-@currentBattle.EndDate
</div>
}
</text>))