我有一个ViewModel,它将两个不同对象列表包括在内:List<Review>
和List<DayCommentary>
到ReviewViewModel
。 List<DayCommentary>
将始终是0,1或2个元素的集合,所有元素都具有不同的DayCommentary.CommentaryFor
(字符串参数)值。
在我看来,我需要在页面的一个部分中为List<DayCommentary>
中的一个元素显示一个textarea,为同一页面的另一个部分中的另一个元素显示另一个textarea。
我尝试使用下面的代码实现此目的,该代码在运行时抛出错误:
@Html.TextAreaFor(model => model.DayCommentary.Select(c => c.CommentaryFor == "Day"),
new {@class = "form-control commentary", @style = "max-width: none"})
错误:
Templates can be used only with field access, property access,
single-dimension array index, or single-parameter custom indexer expressions.
我认为我对LINQ select语句不满意。
实现我想要做的事情的最佳方法是什么,同时仍然绑定到模型以在FormMethod.Post
期间回发到控制器?
答案 0 :(得分:1)
model.DayCommentary.Select(c => c.CommentaryFor == "Day")
这不会有意义,因为它会返回一组bool。
也许你的意思是
model.DayCommentary.First(c => c.CommentaryFor == "Day").CommentaryFor
如果您想要DayCommentary
集合中每个元素的文本区域,请在集合中使用foreach
循环。如果您不确定如何执行此操作,请与我们联系。我很乐意在我的答案中添加一些示例代码。
答案 1 :(得分:0)
如何使用TextArea而不是TextAreaFor,它可以让您指定您想要的任何值:
@Html.TextArea("DayCommentary",
Model.DayCommentary.Single(c => c.CommentaryFor == "Day").Text,
new {@class = "form-control commentary", @style = "max-width: none"})
请注意,上面的代码做了很多假设。第一个参数name假定您希望在帖子上收到名为“DayCommentary”的值。第二个参数假定DayCommentary
对象具有Text
属性 - 显然您无法将对象本身提供给该方法。它还假设LINQ查询只返回一个对象 - 您无法将文本区域绑定到列表。