WPF数据模板在ASP.NET MVC中等效

时间:2011-03-14 17:09:47

标签: wpf asp.net-mvc

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和/或用户控件来实现吗?有依赖关系,例如我可能有一个组框控件,它是上面显示的自由文本问题控件的父级,因此一些模板将包含其他模板的列表等。

非常感谢任何帮助。

非常感谢

3 个答案:

答案 0 :(得分:0)

这样做的唯一方法(据我所知)是使用强类型partial view

答案 1 :(得分:0)

等价物是具有DataAnnotation属性的ViewModel。

基本上,您可以创建一个类,而不是XML文档,并使用属性修饰属性以指定模板和格式信息以及验证约束。

rsenna是正确的,这个模型的表示是通过强类型的局部视图,但实际的定义将出现在视图模型类中。

您需要查看ModelMetadataModelMetadataProviderModelValidator类及其实现的衍生产品和用途,以全面了解其工作原理。

答案 2 :(得分:0)

等效的是编辑器和显示模板,它们是放置在特殊命名文件夹中的部分视图。

您可以使用@Html.DisplayFor()@Html.EditorFor()来调用这些模板。将根据您传递的值选择适当的模板。

如果不存在模板,MVC将自动为您生成一个模板。正如smartcaveman所说,您可以使用数据注释来在某种程度上控制自动生成的内容。

http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-1-introduction.html