应用MVVM到ASP.NET

4

我正在学习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>

感谢您的时间。

也许你应该尝试一下Silverlight。 - R. Martinho Fernandes
你能推荐一个教程吗? - user536158
8个回答

6

正如其他答案所指出的那样,MVVM主要依靠数据绑定来实现,在WPF和Silverlight中可以免费使用。

如果您是Web开发人员,并且想继续使用您的asp.net和html技能,那么您可能值得看看KnockoutJS - 这是一个JavaScript库,提供了从视图到模型或ViewModel的数据绑定。


您可能想要查看以下内容,它使用WPF风格的语法实现了一定程度的服务器端数据绑定:https://github.com/samshiles/MVVM-4-Webforms - Sam Shiles

5

MVVM模式的缺点在于,它只有与真正强大的数据绑定机制(比如WPF中的机制)一起使用时才能发挥出其优势 - 我认为当与ASP.NET WebForms一起使用时,MVVM将不会非常有效。


1

测试性是使用MVVM设计模式的主要原因吗?如果是,那么在WebForms中使用MVP会更合适。如果你搜索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解决的问题之一。


你能回答一下 http://stackoverflow.com/questions/8851933/event-bubbling-and-mvp-asp-net 吗? - LCJ

1

您可以在MVC的视图中使用MVVM(借助knockout),其余部分仍然保持MVC。在这种情况下,您将拥有Web中的MVVM,这是一个不错的解决方案。


0

0

0

3
欢迎来到 Stack Overflow!虽然这个回答从理论上来说是正确的,但最好包含答案的关键部分并提供链接作为参考。 - Michael Myers

0

试试DotVVM

它与Web Forms不兼容,但它分享了它们的原则(postbacks、服务器控件等),解决了它们最大的问题(干净的HTML、没有视图状态、可测试的视图模型),并支持完整的.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>

而且ViewModel是纯的C#类。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接