问题标签 [webformsmvp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
697 浏览

asp.net - 如何在 WebFormsMvp 中从 View 到 Presenter 获取许多属性值?

在 WebFormsMvp 页面中从 View 到 Presenter 获取业务对象的多个属性值的最佳方法是什么?

请记住 DataSources 的这个问题。

这是我的建议:

场景是,我有一个名为 Quote 的业务对象,我想从数据库中加载,编辑然后保存。Quote 类上有很多属性。该表单涉及其中大约 20 个属性。我有现有的方法来向/从数据库加载/保存 Quote 对象。我现在需要将这一切连接在一起。

所以,在我的演示者的 View_Load 处理程序中,我打算做这样的事情:

然后按如下方式绑定我的所有控件:

一切都好,数据在屏幕上。

然后用户进行大量更改并点击“提交”按钮。这是我不确定的地方。

我创建了一个名为 QuoteEventArgs 的类,公开了表单能够编辑的 20 个属性。当视图引发提交按钮的事件时,我将这些属性设置为后面代码中控件的值。然后引发事件以供演示者响应。演示者从数据库中重新加载 Quote 对象,设置所有属性并将其保存到数据库中。

这是正确的方法吗?如果不是,那是什么?

0 投票
1 回答
732 浏览

asp.net - 在 WebFormsMVP 中管理 ViewState

昨天我读了一篇关于 ASP.NET 中 ViewState的非常好的文章。

目前我们正在使用WebFormsMVP在我们的项目中提供更好的可测试性。该框架在 OnInitComplete 中进行演示者绑定,并且严重依赖 DataBind 表达式,例如

正如我在上面的文章中所理解的那样,这会将 Model.FirstName 放入 ViewState。因为当视图状态跟踪已启用时,数据绑定发生在页面生命周期的后期。

一种选择是完全禁用 ViewState。还有其他的吗?请记住,我们不能使用 OnInit 或 OnInitComplete,因为 OnLoad 是演示者可以处理的第一个事件。

还要记住,我以标签为例。我正在寻找一种也适用于复杂控件的解决方案。

谢谢。

0 投票
2 回答
678 浏览

asp.net - ASP.NET WebFormsMVP PageDataSource 事件因未知原因执行两次

问题是SelectMethod和其他操作执行两次。这很难隔离,因为它只发生在更大的解决方案上,而不是在更简单的演示应用程序中。

在这里尝试调试这个是跟踪AXD 文件

更新:

正如已经指出的那样,初始化似乎很好,因此问题必须存在于与应用程序的某些其他方面发生冲突的其他地方。

0 投票
1 回答
605 浏览

asp.net - 有人对 ASP.NET WebFormsMVP 有深入了解吗?

最近我遇到了这个开源项目 ASP.NET WebformsMVP

它似乎是 asp.net mvc 的替代方案,也是将可测试性引入现有 webforms 应用程序的快速方法。(无需经历重写一堆代码以使其适用于 asp.net mvc 的痛苦)

当然,在尝试新事物时,社区支持和开源项目的放弃总是一个问题,但是从这些恐惧中继续前进,有没有人认真尝试过这个框架?如果是这样,您能否分享一些对其优缺点的见解,以及它是否真的值得尝试?

非常感谢!

0 投票
3 回答
437 浏览

asp.net - MVP 模式 - 设计问题

我们正在尝试在当前项目(asp.net 应用程序)中使用 MVP 模式,但遇到了一些问题。该页面有多个部分,我们对这些独立部分使用用户控件。现在每个用户控件都有自己的视图和演示者,页面充当基本视图。现在的问题是如何将用户控件所需的数据传递给它?

根据当前的设计,页面演示者将获得整个页面所需的数据。如何将这些数据传递给用户控件演示者?

我们正在考虑的其他方法是只为用户控件创建视图并使用页面呈现器来处理所有事件。在这种情况下,我们将为每个用户控件视图实现多个视图接口。但是页面展示器如何与所有不同的视图交互呢?

谢谢,jbn

0 投票
1 回答
481 浏览

winforms - 如何在 MVC/MVVM Windows 窗体应用程序中进行错误处理

我正在使用类似于 MVC 的模式构建应用程序。情况是下一个:在模型的上下文中对关联的存储库进行更改。如果更改引发异常,向用户显示有关错误信息的正确方法是什么?在我的程序的先前版本中,当我有 spaguetti 代码组织(模型、视图、控制器重叠)时,启动一个消息框告诉用户错误并不奇怪,因为我几乎从视图中做所有事情。现在在这个新版本中,我想正确地做事情,所以我想在模型层中做任何有视觉表示的事情都是不好的。前段时间我问什么是捕获异常的正确方法。我所指的具体点是将异常从内部代码扩展到上层,而不是在最上层捕获它们。几乎所有的响应都不是一个好的方法规模异常(捕获并再次抛出以被负责任的实体捕获),并且最好在最上层捕获。所以我脑子里有这个冲突。我在想保持关注点分离以扩大规模是不可避免的,但这与之前的建议相冲突。我该如何进行?但这与之前的建议相冲突。我该如何进行?但这与之前的建议相冲突。我该如何进行?

0 投票
1 回答
293 浏览

asp.net - WebformsMvp - 初始化模型

问题很简单。假设我有一个模型。我需要在第一页加载时将默认数据加载到模型中。我在哪里做这个?我考虑过执行覆盖 OnInit 事件的数据加载,但是在触发该事件时,Presenter 不可用。

有什么建议吗?我通过重写 OnLoad 方法来做到这一点,但由于某种原因,该方法被调用了两次,并且也加载了两次数据。

0 投票
0 回答
316 浏览

asp.net - 按页面类型的页面 URL

有什么方法可以通过页面类型获取页面 URL 吗?

我正在尝试创建一个扩展方法,允许使用页面类型而不是 URL 重定向到页面

对于名为 Index.asxp 的页面

Index我需要通过使用类来获取“Index.aspx”TypeOf(Index)

0 投票
1 回答
227 浏览

.net - 当父页面有输出缓存指令时,为什么仍会调用控件的加载事件?

我有一个带有用户控件的页面。如果我将此 outputcache 指令放在控件上,则控件上的加载事件不会触发

但是,如果我在控件所在的页面上放置相同的指令,加载事件就会触发。为什么行为会有所不同?我们正在使用 WebFormsMVP 框架。

0 投票
2 回答
1964 浏览

c# - 从数据列表内的用户控件中的图像按钮触发事件

这是我在这里的第一篇文章,所以我请求你原谅我的错误:D 我面临的问题如下:我试图从数据列表中的一些“ImageButton”中捕获事件,但我遇到了一些问题。

我需要捕捉任何被触发以执行某些操作的按钮(所以我需要识别它)。该按钮位于由“DataList”包含的用户控件内,该用户控件位于用户控件内,该控件是从页面加载的(也具有母版页)。您可以在这里看到嵌套顺序:Page->User-Control->DataList->User Control->ImageButton

我不得不说 Web 应用程序是使用 Web Forms MVP 模式构建的,因此 Pages(不是控件)有一个 Presenter 来管理所有逻辑并发送数据以绑定 Web 窗体,从而加载所需的控件。

成员.aspx

成员.aspx.cs

演示者看起来像这样:

并且控件 DataBoxControl 包含一个包含另一个用户控件的数据列表

最终用户控件 (ContactImage.ascx) 包含 Web 控件“ImageButton”

Id to do action 在“ContactImage”控件中分配给图像按钮“CommandName”,这是单击按钮时我需要检索的值。实际上,ContactImage 用户控件在内部没有做任何事情,我将触发的事件依赖于数据列表上的 OnItemCommand,但我有两个问题:

  1. 我无法在 Page_Load 之前绑定数据列表,因此当“IsPostBack”为假时,我必须检查数据绑定是否发生;在这种情况下,触发事件不会发生,因为 ContactImage 未能尝试填充其属性(DataList Item 为空,因为 List 未绑定)。
  2. 如果将数据列表绑定移动到 Page_Init(在用户控件中),则会触发该事件,但 OnItemCommand 根本不会收到任何内容(并且绑定数据列表的列表也是空的)。

我想知道我正在使用的模式是否在某种程度上是负责任的,因为我建立了一个简单的网站并且它可以工作并且事件到达 ItemCommand

简单的网站(在这里它可以工作,但没有使用 MVP 模式) Event.aspx

事件.aspx.cs

TopNestedControl.ascx

<%@ Register Src="~/Controls/BottomNestedControl.ascx" TagName="BottomControl" TagPrefix="bnc" %>

TopNestedControl.ascx.cs

底部嵌套控件.ascx

BottomNestedControl.ascx.cs

在其他页面中,我使用委托来处理事件,但没有使用“DataList”并且事件被捕获而没有问题。如果有人能帮助我解开这个烂摊子,我会很高兴的。

先感谢您,

哈维尔