如何将更多@Model参数传递给同一个razorengine模板

时间:2011-12-10 14:05:38

标签: asp.net razor

例如A.razortemplate

<html>
<title>@Page.Title</title>
<keywords>@Page.Title</keywords>
<body>
    crumb:<a href="">@Page.Title</a>><a href="">@Post.Title</a>
    <h3>@Post.Title<h3>
    @Post.Body
    by-@User.PostAuthor
</body>
</html>

上面的代码在一个模板(A)中,它包含三个@Model对象,@ Page,@ Post,@ User.i读取RazorEngine代码,发现只需将一个@Model patameter传递给模板,来自RazorEngine项目的以下代码。

protected virtual ITemplate CreateTemplate<T>(Type templateType, T model)
{
    var instance = CreateTemplate(templateType);
    SetModel(instance, model);
    return instance;
}

我讨厌只能传递一个@ Model,我需要一些更灵活的方法,我可以随时从模板中删除crumb语句,可以添加帖子的时间。

对于上述问题,可能是我可以为@ page,@ post,@ user创建一个新类并创建三个属性,我认为这不是完美的解决方案。

顺便说一下,我想把RazorEngine作为前端模板(比如字符串模板等),ASP.NET作为后端只做sql操作并将数据传递到前面 - end.someone可以给出一些建议吗?谢谢。

1 个答案:

答案 0 :(得分:1)

RazorEngine默认使用单数Model属性。此属性可以是您喜欢的任何类型,因此为什么不创建复合模型:

public class TemplateModel
{
    public PostModel Post { get; set; }
    public UserModel User { get; set; }
    public PageModel Page { get; set; }
}

通过这种方式,您可以传递单个模型,并以下列方式访问属性:

@Model.User.PostAuthor