使用带有强制转换的表达式时,ExpressionHelper.GetExpressionText()返回不正确的结果

时间:2013-03-28 10:34:44

标签: asp.net-mvc razor

我在Razor中有这个示例代码:

@Html.TextBoxFor(x => ((VisitGozo.Modules.Data.Events.EventSpecificFieldsData)x.Event.DataObject.SpecificFields).LinkedTourismProduct)

如您所见,表达式包括强制转换。 TextBoxFor使用ExpressionHelper.GetExpressionText()方法将表达式转换为模型绑定的文本。

在上面的示例中,由于转换,返回的字段名称仅为LinkedTourismProduct而不是Event.DataObject.SpecificFields.LinkedTourismProduct。如果没有任何转换,这将正确返回全名。

因此,在模型绑定期间,它不会绑定到正确的属性,因为模型的属性仅为Event.DataObject.SpecificFields.LinkedTourismProduct而不是LinkedTourismProduct

知道为什么会这样,有没有其他解决方案/解决方法?

1 个答案:

答案 0 :(得分:2)

这是正常行为。强类型帮助程序仅支持简单表达式(属性访问和索引器访问)。铸造不是。

执行此操作的正确方法是在视图模型上具有正确类型的属性:

public EventSpecificFieldsData EventSpecificFields { get; set; }

然后将文本框绑定到它而不进行任何强制转换:

@Html.TextBoxFor(x => x.Event.DataObject.EventSpecificFields.LinkedTourismProduct)