我正在学习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>
感谢您的时间。
答案 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)
答案 5 :(得分:0)
答案 6 :(得分:0)
将MVVM与webforms结合使用的关键之一是获得强大的绑定机制来帮助开发。查看以下项目,了解如何使用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);
}
}