【发布时间】:2009-10-19 09:58:21
【问题描述】:
我正在寻找 ASP.NET 的 MVVM 实现。我应该如何处理这个?你能提出任何解决这个问题的设计,特别是针对 ASP.NET Webforms 吗?
谢谢。
【问题讨论】:
我正在寻找 ASP.NET 的 MVVM 实现。我应该如何处理这个?你能提出任何解决这个问题的设计,特别是针对 ASP.NET Webforms 吗?
谢谢。
【问题讨论】:
框架作者在Presentation Model in Action也略谈了一下。
【讨论】:
试试DotVVM。
它与 Web 窗体不兼容,但它共享它的原则(回发、服务器控件等),它解决了它们最大的问题(干净的 HTML、无视图状态、可测试的视图模型)并且它支持完整的 .NET 框架(通过OWIN) 和 .NET Core。
您甚至不需要编写任何javascript,它在后台使用Knockout JS,该框架为您解决了所有有关客户端-服务器通信的问题。
它还有一个不错的Visual Studio integration,它是开源的。
视图如下所示:
<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);
}
}
【讨论】:
许多 MVC 人员正在做类似于视图模型的事情,因为它们不是将域对象返回给控制器,而是具有该视图所需的所有数据的扁平数据结构(视图模型),无论它包含多少域对象的数据。在这方面,视图模型非常适用于 MVC,我相信它也可以在 Web 表单中使用。但是,据我所知,没有办法在 WPF 中执行与 MVVM 相关联的两种数据绑定/命令/事件聚合。
虽然我不知道任何网络表单的实现,但您可以尝试此处描述的一些方法:
Jimmy Bogard - How we do MVC
这里有一篇非常有趣的文章,介绍如何在 winforms 中做 MVP:
Castle Windsor's MVP with ASP.NET
也许您可以使用网络表单创建这两种方法的混合体。
【讨论】:
https://github.com/Zhestokus/dotNet-ASP.NET.TwoWayModel 小库,无需第三方 JavaScript 框架即可为 MVC/MVVM 等模式提供功能
例如 您可以将一些控件属性绑定到类属性
<asp:TextBox runat="server" ID="tbxEmail" Property="{SubscriberModel.Email=Text}" />
【讨论】: