10

我想在对 HTML Helper 的调用中将对象Model.AvailableVerticalTypeexpressionand一起传递。在不传递对象的情况下,语法如下所示:templateNameDisplayForDisplayFor()

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

OfferDetail模板仅接受以下类型的对象Offer

@model DGS.DGSAPI.UI.BusinessModels.Offer

所以我需要一种方法来AvailableVerticleType通过ViewData. 可能吗?ViewData传入的语法是DisplayFor()什么?

4

2 回答 2

6

正如 user3559349 所建议的,您可以将一个匿名对象传递给 DisplayFor() 方法,并且该对象将成为 ViewData 字典的一部分。

在您看来:

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

在您的 OfferDetail 模板中:

(AvailableVerticalType)ViewData["AvailableVerticalType"]

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

@model 可用垂直类型

于 2020-03-27T17:21:26.687 回答
2

你把它传进去ViewDataDictionary,例子如下:

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

我们可以使用第二个重载DisplayFor并将附加数据传入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" }
})

请记住,在模型中传递数据总是更好。

于 2020-06-27T04:56:03.700 回答