2011-12-10 36 views
1

例如A.razortemplate如何通過一個更@Model參數爲相同razorengine模板

<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 
    [email protected] 
</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; 
} 

我恨纔剛剛可以通過一個@模式,我需要一些更靈活的方法,我可以隨時從模板中移除碎屑的語句,可加職位的時間。

對於上述問題,可能是我可以創建一個新的類,併爲@頁,@後,@用戶創建三個propertys,我認爲它不是完美的解決方案。

順便說一句,我想把RazorEngine作爲前端模板(就像字符串模板等),ASP.NET作爲後端只是做sql操作並將數據傳遞給前端。可以給一些建議嗎?謝謝。

回答

1

RazorEngine使用單數Model屬性爲默認值。這個屬性可以是你喜歡的任何類型的,那麼爲什麼不創建一個複合模型:

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

這樣,你可以通過一個單一的模式,並作爲訪問屬性:

@Model.User.PostAuthor 
相關問題