1

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

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

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

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

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

知道为什么会发生这种情况,还有其他解决方案/解决方法吗?

4

1 回答 1

3

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

正确的方法是在您的视图模型上拥有一个正确类型的属性:

public EventSpecificFieldsData EventSpecificFields { get; set; }

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

@Html.TextBoxFor(x => x.Event.DataObject.EventSpecificFields.LinkedTourismProduct)
于 2013-03-28T10:41:40.560 回答