我在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
。
知道为什么会这样,有没有其他解决方案/解决方法?
答案 0 :(得分:2)
这是正常行为。强类型帮助程序仅支持简单表达式(属性访问和索引器访问)。铸造不是。
执行此操作的正确方法是在视图模型上具有正确类型的属性:
public EventSpecificFieldsData EventSpecificFields { get; set; }
然后将文本框绑定到它而不进行任何强制转换:
@Html.TextBoxFor(x => x.Event.DataObject.EventSpecificFields.LinkedTourismProduct)