模板ASP.NET MVC视图
问题描述:
下面是用户等级显示在我看来代码:模板ASP.NET MVC视图
<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作为参数。有什么方法来实现它?
答
我终于使用了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%/@[email protected]
</div>
}
</text>))
答
你可以看看创建HTMLHelper类的扩展方法来做这样的渲染。
您也可以使用HTMLHelper RenderPartial方法。为此,您需要定义
- 单独的视图类。
- 有一个与之相关的模型。调用
- RenderPartial扩展,这个视图需要渲染。
答
我会继续前进,编写自定义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(模型)
但我怎么能传递的foreach声明部分观点? – SiberianGuy