Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将其他ViewData传递给DisplayFor模板_C#_Asp.net_Asp.net Mvc_Viewdata_Display Templates - Fatal编程技术网

C# 将其他ViewData传递给DisplayFor模板

C# 将其他ViewData传递给DisplayFor模板,c#,asp.net,asp.net-mvc,viewdata,display-templates,C#,Asp.net,Asp.net Mvc,Viewdata,Display Templates,我想将对象Model.AvailableVerticalType与 调用HTML帮助程序中的expression和templateName。 在不传递对象的情况下,语法如下所示: @Html.DisplayFor(o => offer, MVC.Shared.Views.DisplayTemplates.OfferDetail) @{ string additionalData = ViewData[ViewDataKeys.AdditionalData]; /*

我想将对象
Model.AvailableVerticalType
与 调用HTML帮助程序中的
expression
templateName
。 在不传递对象的情况下,语法如下所示:

@Html.DisplayFor(o => offer, MVC.Shared.Views.DisplayTemplates.OfferDetail)
@{
    string additionalData = ViewData[ViewDataKeys.AdditionalData];

    /*
     * if you need to cast the data type:
     * var additionalData = (AdditionalDataType)ViewData[ViewDataKeys.AdditionalData];
     */
}
OfferDetail
模板仅接受
Offer
类型的对象:

@model DGS.DGSAPI.UI.BusinessModels.Offer

因此,我需要一种通过
ViewData
发送
AvailableVerticleType
的方法。可能吗?在
DisplayFor()
中传递
ViewData
的语法是什么?

根据用户3559349的建议,您可以将匿名对象传递到DisplayFor()方法中,它将成为ViewData字典的一部分

在你看来:

@Html.DisplayFor(o => offer, "OfferDetail", new {AvailableVerticalType = Model.AvailableVerticalType }
在您的OfferDetail模板中:

(AvailableVerticalType)ViewData["AvailableVerticalType"]
您还可以创建一个局部视图,该视图为AvailableVerticalType声明了一个模型,并在主视图中引用该模型

@模型可用EverticalType


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
,如下所示:

@Html.DisplayFor(o => offer, MVC.Shared.Views.DisplayTemplates.OfferDetail)
@{
    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" }
})

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

是模型的对象部分,还是在GET方法中添加了使用
ViewData
ViewBag
?请注意,它是您想要的
模型。AvailableVerticalType
是模型的一部分。要传递它,您将使用
@Html.DisplayFor(o=>offer,MVC.Shared.Views.DisplayTemplates.OfferDetail,new{data=Model.AvailableVerticalType})
,然后在模板中,您可以使用
(yourType)ViewData[“data”]
@StephenMuecke谢谢@StephenMuecke,如果这是答案,请将其作为答案发布。对我来说,这是一个XY问题,你问题的最后一行真正触及了问题的核心。OP询问
视图数据
,因为他们不知道如何将数据作为模型的一部分传递。鉴于此,是否有一种方法可以扩展模型,同时仍然依赖
DisplayFor()
模板所需的表达式绑定来正确评估原始目标属性上的验证属性?(我不确定是否有,因此必须使用
ViewData