将其他ViewData传递给DisplayFor模板

时间:2016-06-10 07:11:59

标签: c# asp.net-mvc viewdata display-templates

我想传递一个对象Model.AvailableVerticalType HTML Helper expression调用中的template nameDisplayFor。 不传递对象,DisplayFor语法如下所示:

@Html.DisplayFor(o => offer, MVC.Shared.Views.DisplayTemplates.OfferDetail)

OfferDetail模板仅接受offer类型的对象。

@model DGS.DGSAPI.UI.BusinessModels.Offer

所以我需要一种通过ViewData发送它的方法。可能吗?在DisplayFor中传递Viewdata的语法是什么?

2 个答案:

答案 0 :(得分:3)

根据user3559349的建议,您可以将一个匿名对象传递到DisplayFor()方法中,并且该对象将成为ViewData词典的一部分。

您认为:

@Html.DisplayFor(o => offer, "OfferDetail", new {AvailableVerticalType = Model.AvailableVerticalType }

在OfferDetail模板中:

(AvailableVerticalType)ViewData["AvailableVerticalType"]

您还可以只创建一个局部视图,该局部视图具有为AvailableVerticalType声明的模型,并在主视图中引用该模型。

@model AvailableVerticalType

答案 1 :(得分:1)

您在ViewDataDictionary中传递它,如下例:

// optional: if you don't want to use "AdditionalData" magic string
public static class ViewDataKeys
{
    public const string AdditionalData = "AdditionalData";
}

我们可以使用DisplayFor中的2nd overload并在ViewDataDictionary中传递其他数据:

@Html.DisplayFor(m => m.MyModel, new ViewDataDictionary { { ViewDataKeys.AdditionalData, "additional-value" } })

DisplayFor模板中,您可以像这样访问ViewDataDictionary

@{
    string additionalData = ViewData[ViewDataKeys.AdditionalData];

    /*
     * if you need to cast the data type:
     * var additionalData = (AdditionalDataType)ViewData[ViewDataKeys.AdditionalData];
     */
}

您还可以传递多个其他数据,例如:

@Html.DisplayFor(m => m.MyModel, new ViewDataDictionary { 
    { ViewDataKeys.AdditionalData1, "additional-value1" },
    { ViewDataKeys.AdditionalData2, "additional-value2" }
})

请记住,最好在模型中传递数据。