将MVVM应用于ASP.NET

时间:2010-12-27 10:33:43

标签: asp.net mvvm

我正在学习MVVM,我想在ASP.NET中使用它。

我在互联网上找到的一些例子使用XAML作为视图。

有没有办法在视图中使用常规ASP.NET页面而不是XAML?

这是一个XAML示例:

<UserControl x:Class="MVVMExample.DetailView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid x:Name="LayoutRoot" Background="White" 
                 DataContext="{Binding CurrentContact}">
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <TextBlock Text="Name:" HorizontalAlignment="Right" Margin="5"/>
        <TextBlock Text="{Binding FullName}" 
               HorizontalAlignment="Left" Margin="5" Grid.Column="1"/>
        <TextBlock Text="Phone:" HorizontalAlignment="Right" 
               Margin="5" Grid.Row="1"/>
        <TextBlock Text="{Binding PhoneNumber}" 
               HorizontalAlignment="Left" Margin="5" 
               Grid.Row="1" Grid.Column="1"/>
    </Grid> </UserControl>

感谢您的时间。

8 个答案:

答案 0 :(得分:6)

正如其他答案所指出的那样,MVVM(主要)由于数据绑定而工作,而WPF和Silverlight则免费提供。

如果您是一名Web开发人员,并希望继续使用您的asp.net和html技能,那么可能值得查看KnockoutJS - 一个javascript库,它提供从View到Model或ViewModel的数据绑定。

答案 1 :(得分:5)

MVVM模式的缺点是它只能与真正强大的数据绑定机制(如WPF中的那些)一起使用时才能正常工作 - 我不认为MVVM在与ASP.NET WebForms一起使用时会非常有效。

答案 2 :(得分:1)

可测试性是否是想要使用MVVM设计模式的主要原因?假设它是,那么你会发现MVP更适合WebForms。如果您使用Google ASP.NET MVP,您会看到一些示例。一般来说,这是一本关于测试ASP.NET应用程序的好书 - http://www.wrox.com/WileyCDA/WroxTitle/Testing-ASP-NET-Web-Applications.productCd-0470496649,descCd-description.html

或者,如果这是一个新项目,那么我会认真考虑ASP.NET MVC,因为WebForms中的可测试性并不简单,而这只是ASP.NET MVC解决的问题之一。

答案 3 :(得分:1)

您可以在MVC的View上使用MVVM(在knockout的帮助下),其余的将保留MVC。在这种情况下,您将在Web中使用MVVM,这是一个很好的解决方案。

答案 4 :(得分:0)

MVVM专为WPF设计,其中数据绑定付诸行动。

检查

WPF Apps With The Model-View-ViewModel Design Pattern

有关MVVM的详细信息

答案 5 :(得分:0)

答案 6 :(得分:0)

将MVVM与webforms结合使用的关键之一是获得强大的绑定机制来帮助开发。查看以下项目,了解如何使用webforms实现此目的。

https://github.com/samshiles/MVVM-4-Webforms

答案 7 :(得分:0)

尝试DotVVM

它与Web窗体不兼容,但它分享了它的原则(回发,服务器控件等),它解决了它们最大的问题(干净的HTML,没有viewstate,可测试的视图模型),并且它支持完整的.NET Framework(通过OWIN)和.NET Core。

您甚至不需要编写任何javascript,它在后台使用Knockout JS,该框架为您解决了有关客户端 - 服务器通信的所有问题。

它还有一个很好的Visual Studio 2015集成,它是开源的。

观点如下:

<div class="form-control">
    <dot:TextBox Text="{value: Name}" />
</div>
<div class="form-control">
    <dot:TextBox Text="{value: Email}" />
</div>
<div class="button-bar">
    <dot:Button Text="Submit"
        Click="{command: Submit()}" />
</div>

视图模型是纯C#类。

public class ContactFormViewModel 
{
    public string Name { get; set; }
    public string Email { get; set; }

    public void Submit() 
    {
        ContactService.Submit(Name, Email);
    }
}