我想传递一个对象Model.AvailableVerticalType
HTML Helper expression
调用中的template name
和DisplayFor
。
不传递对象,DisplayFor语法如下所示:
@Html.DisplayFor(o => offer, MVC.Shared.Views.DisplayTemplates.OfferDetail)
OfferDetail
模板仅接受offer
类型的对象。
@model DGS.DGSAPI.UI.BusinessModels.Offer
所以我需要一种通过ViewData发送它的方法。可能吗?在DisplayFor中传递Viewdata的语法是什么?
答案 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" }
})
请记住,最好在模型中传递数据。