WPF提供了创建数据模板的功能。这些模板可用于呈现某些类型的对象。我有一个层次结构中的对象列表,我希望在视图中显示。单个WPF数据模板的示例如下所示。当FreeTextQuestion类型的对象是要渲染到视图上的模型的一部分时,这将呈现包含标签和文本框的以下控件。
<DataTemplate DataType="{x:Type QuestionTypes:FreeTextQuestion}">
<StackPanel x:Name="FieldTextQuestion">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200px"/>
<ColumnDefinition Width="20px"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Label x:Name="label" Grid.Column="0" Content="{Binding Title}" Style="{StaticResource questionTitle}" />
<TextBox x:Name="textbox" Grid.Column="2" Style="{StaticResource standardTextBox}" src:FocusExtension.IsFocused="{Binding Path=IsFocused, Mode=TwoWay}" >
<TextBox.Text>
<Binding Path="Value" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<DataErrorValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</Grid>
</StackPanel>
</DataTemplate>
我的问题是如何在ASP.NET MVC中实现同样的功能?有这样的等价吗?这可以使用Html Helper Extensions和/或用户控件来实现吗?有依赖关系,例如我可能有一个组框控件,它是上面显示的自由文本问题控件的父级,因此一些模板将包含其他模板的列表等。
非常感谢任何帮助。
非常感谢
答案 0 :(得分:0)
这样做的唯一方法(据我所知)是使用强类型partial view。
答案 1 :(得分:0)
等价物是具有DataAnnotation属性的ViewModel。
基本上,您可以创建一个类,而不是XML文档,并使用属性修饰属性以指定模板和格式信息以及验证约束。
rsenna是正确的,这个模型的表示是通过强类型的局部视图,但实际的定义将出现在视图模型类中。
您需要查看ModelMetadata
,ModelMetadataProvider
和ModelValidator
类及其实现的衍生产品和用途,以全面了解其工作原理。
答案 2 :(得分:0)
等效的是编辑器和显示模板,它们是放置在特殊命名文件夹中的部分视图。
您可以使用@Html.DisplayFor()
或@Html.EditorFor()
来调用这些模板。将根据您传递的值选择适当的模板。
如果不存在模板,MVC将自动为您生成一个模板。正如smartcaveman所说,您可以使用数据注释来在某种程度上控制自动生成的内容。
http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-1-introduction.html