2014-01-14 53 views
3

我嘗試使用同一個對象呈現兩個單獨的模板時遇到問題。RazorView,爲多個模板使用相同的模型對象

我有一些看起來像這樣:

@Html.DisplayFor(m => Model, "TemplateOne") 
@Html.DisplayFor(m => Model, "TemplateTwo") 

第一個模板得到渲染並不會第二個。

我所使用的.NET反射來逐步執行代碼,看看發生了什麼事情,發現這個:

if (html.ViewDataContainer.ViewData.TemplateInfo.VisitedObjects.Contains(item)) 
{ 
    return string.Empty; 
} 

TemplateHelpers.TemplateHelper(HTML的HtmlHelper,ModelMetadata元數據,串htmlFieldName,串TEMPLATENAME,DataBoundControlMode模式,對象additionalViewData,ExecuteTemplateDelegate executeTemplate)

因此,它檢查模型/對象是否已經用於呈現模板,然後如果它在我的示例中有,它返回「」,所以第二個模板不會被顯示。

我有一個解決方法是克隆第二個模板的模型,但我想知道是否有其他的東西我可以做,就像我可以設置配置選項?

史蒂夫

+0

必須有別的事情你做錯了,因爲我不能再現這個問題。從View和DisplayTemplates中發佈更多的代碼,也許會有所幫助。 – Zabavsky

+0

我也無法重現這一點(試用MVC 3,4和5)。然而,我注意到的一個問題是,有時在使用VS2013和MVC 5構建之後,一個模板顯然會丟失。實際上,我必須修改調用模板的視圖,保存並重建以使其正常工作。似乎是間歇性的,可能是一個錯誤。 –

+0

如果我要將同一模型上的另一個屬性傳遞給其中一個模板,我會看看是否可以在新項目中獲得同樣的結果。我會讓你張貼 –

回答

0

的解決這個辦法,我現在是創造

public class ModelWrapper{ 

     public object Model { get; set} 
} 

,並通過將其設置爲任何我真正需要的模型。

不幸的限制