Questions tagged «asp.net-mvc»

ASP.NET MVC框架是一个Microsoft Web应用程序框架,它实现了模型视图控制器(MVC)模式。

2
MVC体系结构的最佳做法
我的问题更多是关于如何构建MVC应用程序。例如,鼓励我们使用带有存储库模式的DI来分离控制器的数据访问,但是在HOW上很少提到专门针对MVC做到这一点。例如,我们将存储库类放在哪里?它们似乎与模型无关,因为模型也应该与实际的数据访问技术相对分离。 第二个问题涉及如何构造层或层。大多数示例应用程序(书呆子晚餐,音乐商店等)似乎都使用单层2层方法(不计算测试),通常具有直接调用L2S或EF代码的控制器。 如果要创建多层/层应用程序,那么关于MVC的最佳实践是什么?

1
调用函数,永远不要在C#中等待它
我的mvc4 Web应用程序中有一个控制器,其中有一个需要调用另一个函数的动作。该函数会发生什么,即返回值对我的操作并不重要。我如何才能调用该函数而从不等待其执行? 我认为可以通过异步完成此操作,但我的意思是不使用资源,只需调用函数就不要等待发生的任何事情。 请给我一些建议。
26 c#  .net  asp.net  asp.net-mvc 

6
您为什么要“等待”一个方法,然后立即查询它的返回值?
在本文中,提供了以下示例代码(为简便起见,对其进行了略作编辑): public async Task<ActionResult> Details(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Department department = await db.Departments.FindAsync(id); if (department == null) { return HttpNotFound(); } return View(department); } 该FindAsync方法Department通过其ID 检索对象,并返回Task<Department>。然后立即检查部门以查看其是否为空。据我了解,以这种方式要求Task的值将阻止代码执行,直到返回了来自waited方法的值,从而有效地使它成为同步调用。 你为什么要这样做?Find(id)如果您要立即阻止,仅调用sync方法不是更简单吗?
24 c#  .net  asp.net-mvc  async 

3
为什么应该在IEnumerable <T>上使用List <T>?
在我的ASP.net MVC4 Web应用程序中,我使用IEnumerables,试图遵循这一口头禅来编程接口,而不是实现。 Return IEnumerable(Of Student) 与 Return New List(Of Student) 人们告诉我使用List而不是IEnumerable,因为列表会强制执行查询,而IEumerable不会。 这真的是最佳做法吗?有没有其他选择?我对使用可以使用界面的具体对象感到奇怪。我的奇怪感觉合理吗?

4
为什么不赞成测试MVC视图?
我目前正在为ASP.Net MVC应用程序奠定基础,并且正在研究应该准备编写哪种单元测试。我已经在多个地方看到人们在本质上说:“不要打扰测试您的观点,没有逻辑,这是微不足道的,将被集成测试所涵盖”。 我不明白这如何成为公认的智慧。集成测试的目的与单元测试的目的完全不同。如果我中断了某些事情,我不想在半小时后的集成测试中断时就知道,我想立即知道。 示例场景: 假设我们正在与一个Customer实体一起处理标准的CRUD应用。客户有名字和地址。在每个测试级别,我都想验证客户检索逻辑是否正确获取名称和地址。 为了对存储库进行单元测试,我编写了一个集成测试来访问数据库。为了对业务规则进行单元测试,我模拟了存储库,为业务规则提供适当的数据,并验证是否返回了预期的结果。 我想做的是: 为了对UI进行单元测试,我模拟了业务规则,设置了预期的客户实例,渲染了视图,并验证视图是否包含我指定的实例的适当值。 我要做的事情: 要对存储库进行单元测试,我编写了一个集成测试,设置了适当的登录名,在数据库中创建了所需的数据,打开浏览器,导航到客户,并验证结果页面是否包含适当的内容我指定的实例的值。 我意识到上面讨论的两种情况之间存在重叠,但是关键的区别在于设置和执行测试所需的时间和精力。 如果我(或另一个开发人员)从视图中删除了地址字段,则我不想等待集成测试发现这一点。我希望在每天多次获取的单元测试中被发现并标记出来。 我感到我只是没有掌握一些关键概念。有人可以解释为什么要对MVC视图的有效性立即进行测试反馈是一件坏事吗?(或者,如果还不错,则不是获得所说反馈的预期方式)


2
ASP.NET MVC应用程序是否应该直接使用实体框架作为模型?
我正在Visual Studio 2013(MVC 5)中构建我的第一个MVC应用程序,但我对设置模型的最佳方法尚不清楚。 我已经从现有数据库中使用代码优先生成了一个实体框架模型。我的第一个直觉是创建一些中间类,这些中间类将成为视图使用的模型,并使这些类与实体框架类一起工作。 当我编写中介类时,我意识到我只是在重新实现EF类已经用偶尔的私有setter或从一种数据类型转换为另一种数据类型所做的许多事情。因此,这似乎是一种浪费。 是否直接将实体框架类用作MVC应用程序的模型是一般规则?还是构建这些中间课程缺少一些好处?

3
如何为复杂的对象模型实现存储库模式?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 7年前。 我们的数据模型具有将近200个类别,可以分为大约十二个功能区域。使用域本来很好,但是分隔不是那么干净,我们不能更改它。 我们正在重新设计DAL以使用实体框架,而我所看到的大多数建议都建议使用存储库模式。但是,这些示例都没有真正处理复杂的对象模型。我发现一些实现建议使用每个实体存储库。对于大型,复杂的模型,这似乎是荒谬的且不可维护的。 真的有必要为每个操作创建一个UnitOfWork,并为每个实体创建一个Repository吗?我可能会参加数千堂课。我知道这是不合理的,但是我发现在复杂模型和实际业务应用程序上实现存储库,工作单元和实体框架的指导很少。

5
当客户要求在其网站上进行RTF编辑时,您会怎么做?
众所周知,XSS攻击很危险,而且很容易发动。像ASP.NET MVC一样,各种框架使对HTML进行编码变得容易: &lt;%= Html.Encode("string"); %&gt; 但是,当您的客户要求他们能够直接从Microsoft Word文档上载其内容时,会发生什么情况? 这是场景:人们可以将Microsoft Word中的内容复制并粘贴到WYSIWYG编辑器(在本例中为tinyMCE)中,然后将该信息发布到网页上。 该网站是公开的,但是只有该组织的成员才能访问该网页上的信息。 如何以安全的方式处理这些要求?目前,还没有检查客户发布的内容(因为只有“受信任的”用户可以发布),但是我对此并不特别满意,如果帐户被黑客入侵,我想将其进一步锁定。 我知道,满足这些要求的唯一概念性方法是将HTML标签列入白名单,并让它们通过。还有另一种方法吗?如果不是,有什么安全的方法可以让用户以任何形式将输入存储在数据库中,而只显示正确编码并清除不良标签的输入? 相关问题 防止跨站点脚本(XSS)
18 c#  .net  asp.net-mvc 

1
是否需要工厂类来创建视图模型?
我的一位同事建议在我们的ASP.NET MVC解决方案中使用工厂类创建视图模型对象。其想法是,它可以帮助我们的应用程序中构建视图模型的方式设计和可维护性。 我想找出是否有人对此有经验。我进行了一些研究,但在这种实践上发现得很少。 当前,我们在控制器级别创建viewmodel对象,例如 public ActionResult Index() { return this.View(this.BuildIndexViewModel()); } 因此this.BuildIndexViewModel()负责创建viewmodel类(显然是:)。但是我们正在研究以下可能性: public ActionResult Index() { return this.View(ViewModelFactory.CreateIndexViewModel()); } 这是一个有趣的想法,但我不是100%相信。我对其他人对此的看法感兴趣。

3
将ViewModel与Model完全相同是个好主意吗
我的解决方案中包含以下几层: 应用域 应用服务 App.Core(也许您将此称为App.DataLayer) App.Web 软件设计模式不是我的问题,我有以下模型 Domain public class Foo { public int Id {get;set;} public int Name {get;set;} public int Value {get;set;} } 我想在视图(例如主页)上使用此模型,并且要使用Id, Name &amp; Value,因此,如果要创建ViewModel,我将添加以下内容: public class FooViewModel { public int Id {get;set;} public int Name {get;set;} public int Value {get;set;} } 那么,这是个好主意吗?或只是使用Foo代替FooViewModel?

5
命名上传图像的最佳做法是什么?
假设我的Web应用程序中有一个表单,用户可以在其中上传个人资料图片。 我对文件大小,尺寸等几乎没有要求,但是当用户上传图像时,如何在系统上命名它们?我想它需要保持一致并且也是唯一的。 也许是GUID? a5c627bedc3c44b7ae7c06a44fb3fcf8.jpg 时间戳记? 129899740140465735.jpg 哈希?例如:md5 b1a9acaf295cf14ffbc5b6538294562c.jpg 有没有标准或推荐的方法来做到这一点?

2
最好有单独的“创建”和“编辑”动作,还是将“创建”和“编辑”合并为一个动作?
我们正在使用带有控制器/视图表示层和模型的ASP.NET MVC 2,该模型和模型由业务逻辑层,数据访问层[存储过程和与存储过程进行通信的类/方法]组成。 在业务层及更高层中,对于大多数用途而言,编辑似乎能够代表对象的创建和对象的编辑。这与定义“保存”方法的存储库设计模式非常吻合。我们可以简单地在存储过程中检查ID是否为0,然后如果ID为0则创建一个新对象,否则我们可以只更新现有对象,因为类别ID应该匹配一个。 讨论的主要要点是,将包含创建的编辑拆分为DAL层之外的创建和编辑的单独部分是否最有意义。 一个明显的例子可以显示为路线: 创建 - HTTP:// someurl / somearea /编辑/ 0 编辑 - HTTP:// someurl / somearea /编辑/ 254 与 创建 - HTTP:// someurl / somearea /创建 编辑 - HTTP:// someurl / somearea /编辑/ 254 是否有与此相关的既定标准或最佳实践? 我知道这是一个小细节,但从逻辑上讲,这是一个重要的细节。

2
如何使ASP.NET MVC网站模块化
我正在计划用ASP.NET MVC 4构建的员工Intranet系统。我们希望该站点由单独的“模块”组成,每个模块都提供不同的功能:消息传递,薪资变更等我希望这些模块能够在编译时启用或禁用。主页将显示某种导航,该导航将链接到所加载的每个模块。 到目前为止,这很容易,但是我不希望导航功能必须事先了解模块。换句话说,我希望模块是动态可发现的。我希望能够为新模块编写代码,然后将链接添加到导航栏中,而源代码中其他任何地方都没有代码更改。每个模块都应该有某种向导航栏注册的方式,更重要的是,每个模块在加载时都应完成此操作。 我认为这排除了使用MVC的区域的能力,因为这些区域是针对事先知道站点布局的情况而设计的。尽管人们似乎已经成功地将MEF与MVC相结合,但MEF似乎是适当的。MEF实际上是到达这里的方法,还是有更好的方法来完成我需要的工作?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.