Questions tagged «asp.net-mvc»

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

2
最佳开源ASP.NET MVC电子商务项目[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我需要启动并运行一个电子商务站点,但是如果不需要,我真的不想从头开始进行编程。我想使用ASP.NET MVC对其进行编程。 我正在寻找一种很好的开源替代品(如果它足够模块化,则可以购买),可以用作基础并通过所需的功能进行增强? 它必须具有所有“常规”电子商务功能,并且还可以与我选择的信用卡API集成。 如果有人在这里对我有任何建议,我将不胜感激:)

5
带有Web API的纯前端JavaScript与带有Ajax的MVC视图
这更多是关于人们近来对如何拆分Web应用程序的想法的讨论。 我习惯于使用其所有视图和控制器来创建MVC应用程序。通常,我将创建一个完整视图,并在一个完整页面请求中将其传递回浏览器,除非我不想立即填充特定区域,然后使用DOM页面加载事件来调用服务器来加载其他区域使用AJAX。 同样,当涉及部分页面刷新时,我将调用MVC操作方法,该方法将返回HTML片段,然后可以使用该HTML片段填充页面的某些部分。这将用于那些我不想减慢初始页面加载速度的区域,或者是更适合AJAX调用的区域。一个示例是表分页。如果您想转到下一页,我希望在AJAX调用获得该信息而不是使用整页刷新的情况下使用。但是AJAX调用仍然会返回HTML片段。 我的问题是。我对这个古老的想法是因为我来自.net背景,而不是纯粹的前端背景吗? 与我一起工作的聪明的前端开发人员,宁愿在MVC视图中什么也不做,而宁愿在前端做任何事情。一直到填充页面的Web API调用。因此,他宁愿返回一个标准对象并使用javascript创建页面的所有元素,而不是调用返回HTML的MVC操作方法。 前端开发人员的方式意味着我通常通过MVC模型验证(包括客户端验证)获得的任何好处都将消失。这也意味着我创建视图,使用强类型html模板等获得的任何好处都将消失。 我相信这意味着我需要为前端和后端验证编写相同的验证。javascript还需要有很多方法来创建DOM的所有不同部分。例如,当向表中添加新行时,我通常会使用MVC部分视图创建该行,然后将其作为AJAX调用的一部分返回,然后将其注入表中。通过使用纯前端方式,javascript将为api调用中的行引入一个对象(例如产品),然后从该对象创建一行。创建表行的每个单独的部分。 有问题的网站将在管理,表格,产品搜索等方面有很多不同的领域。我认为不需要以单一页面应用程序方式构建的网站。 大家对此有何想法? 我很想听听前端开发人员和后端开发人员的意见。

4
通过这种方式,我编写此代码是可测试的,但是我缺少它吗?
我有一个名为的界面IContext。出于此目的,除了以下内容外,它的作用并不重要: T GetService<T>(); 该方法的作用是查看应用程序的当前DI容器,并尝试解决依赖关系。我认为还算标准。 在我的ASP.NET MVC应用程序中,我的构造函数如下所示。 protected MyControllerBase(IContext ctx) { TheContext = ctx; SomeService = ctx.GetService<ISomeService>(); AnotherService = ctx.GetService<IAnotherService>(); } 因此,我不是在为每个服务的构造函数中添加多个参数(因为这对于扩展应用程序的开发人员来说确实很烦人和耗时),而是使用此方法来获取服务。 现在,感觉不对。但是,我目前在脑海中证明它的方式是这样- 我可以嘲笑它。 我可以。模拟IContext测试控制器并不难。无论如何,我必须: public class MyMockContext : IContext { public T GetService<T>() { if (typeof(T) == typeof(ISomeService)) { // return another mock, or concrete etc etc } // etc …

2
什么是“表示逻辑”,视图中可接受多少?
在我的Web应用程序中,我必须提供用于创建和编辑的表单。创建和编辑的形式存在细微差别,因此我认为在我看来是这样的: <form> // a lot of htnl goes here @if (editing) { // some more fields shown in edit mode } @if(!editing) { // some stuff shown in create mode } 我一直试图不在if视图中放置任何语句,但是这次我看不到任何其他选择,只是在两个地方复制了很大一部分HTML,我不想这样做。这是正确的“表示逻辑”吗,还有其他选择吗?

5
如何解决JSON和Entity的循环引用问题
我一直在尝试创建一个网站,该网站将MVC和JSON用于我的表示层,以及用于数据模型/数据库的Entity框架。我的问题与将模型对象序列化为JSON有关。 我正在使用代码优先方法创建数据库。在执行代码优先方法时,一对多关系(父/子)要求子对父有引用。(示例代码是我的错字,但您会看到图片) class parent { public List<child> Children{get;set;} public int Id{get;set;} } class child { public int ParentId{get;set;} [ForeignKey("ParentId")] public parent MyParent{get;set;} public string name{get;set;} } 通过JsonResult返回“父”对象时,由于“子”具有父类的属性,因此引发循环引用错误。 我已经尝试了ScriptIgnore属性,但是无法查看子对象。在某些时候,我将需要在父子视图中显示信息。 我试图为没有循环引用的父级和子级创建基类。不幸的是,当我尝试发送baseParent和baseChild时,它们被JSON分析器读取为它们的派生类(我很确定此概念正在使我逃避)。 Base.baseParent basep = (Base.baseParent)parent; return Json(basep, JsonRequestBehavior.AllowGet); 我想出的一个解决方案是创建“查看”模型。我创建数据库模型的简单版本,其中不包含对父类的引用。这些视图模型每个都有返回数据库版本的方法和一个将数据库模型作为参数的构造函数(viewmodel.name = databasemodel.name)。尽管此方法有效,但似乎是强制的。 注意:我在这里发布是因为我认为这值得讨论。我可以利用其他设计模式来解决此问题,也可以像在模型上使用其他属性一样简单。在搜索中,我没有找到克服此问题的好方法。 我的最终目标是拥有一个很好的MVC应用程序,该应用程序充分利用JSON与服务器进行通信并显示数据。同时跨层维护一致的模型(或尽我所能)。

4
在模型中放入诸如“ FullName”或“ FormattedPhoneNumber”之类的吸气剂是“一种模式的气味”吗?
我正在开发ASP.NET MVC应用程序,并且已经养成了将看起来有用且方便的吸气剂放入模型/实体类的习惯。 例如: public class Member { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string PhoneNumber { get; set; } public string FullName { get { return FirstName + " " + LastName; } } …

3
IValidaableObject与单一责任
我喜欢MVC的可扩展性,它允许视图模型实现IValidatableObject,并添加自定义验证。 我尝试使我的控制器保持精简,使此代码成为唯一的验证逻辑: if (!ModelState.IsValid) return View(loginViewModel); 例如,登录视图模型实现IValidatableObject,通过构造函数注入获取ILoginValidator对象: public interface ILoginValidator { bool UserExists(string email); bool IsLoginValid(string userName, string password); } 似乎在视图模型中注入实例的Ninject并不是真正的惯例,甚至可能是反模式? 这是一个好方法吗?有更好的吗?

3
当前分页实现的设计问题
我已经在asp.net mvc上专门检查了分页实现,我真的觉得实现中的效率较低。 首先,所有实现都使用如下所示的分页值。 public ActionResult MostPopulars(int pageIndex,int pageSize) { } 我觉得不对的是pageIndex和pageSize完全应该是Pagination类的成员,否则这种方式看起来功能太多。它还简化了应用程序层中不必要的参数传递。 第二件事是他们使用下面的界面。 public interface IPagedList<T> : IList<T> { int PageCount { get; } int TotalItemCount { get; } int PageIndex { get; } int PageNumber { get; } int PageSize { get; } bool HasPreviousPage { get; } bool HasNextPage …

5
从ASP.Net MVC返回ASP.Net Webforms。推荐模式/架构?
对于你们中的许多人来说,这听起来像是一个荒谬的问题,但我问的是,因为我对ASP.Net Webforms的了解很少甚至没有经验 -我直接去了ASP.Net MVC。 我现在正在一个项目中,我们仅限于.Net 2.0和Visual Studio 2005。 我喜欢在使用ASP.Net MVC时将关注点清晰地分开,并且正在寻找使Webforms难以忍受的东西。对于喜欢asp.net MVC,但仍停留在.net 2.0和Visual Studio 2005上的人,是否有任何推荐的模式或做法?

1
ASP.NET MVC中的异步控制器:真正的优势/如何实现?
我一直在阅读有关ASP.NET MVC中异步控制器方法的文章(http://visualstudiomagazine.com/articles/2013/07/23/async-actions-in-aspnet-mvc-4.aspx),我认为我可能错过了重点。 考虑一下我写的这种方法,它与文章中的示例非常相似: [HttpGet] [AsyncTimeout(8000)] [HandleError(ExceptionType = typeof(TimeoutException), View = "TimedOut")] public async Task<ActionResult> Index(CancellationToken cancellationToken) { WidgetPageViewModel model = new WidgetPageViewModel() { toAdd = new Widget() }; model.all = await _repo.GetAllAsync(cancellationToken); return View(model); } 据我了解,这是运行时事物将如何展开的方式: 将为传入的HTTP请求创建一个ASP.NET线程。 该线程将(已经完成了一些必要的初步工作)输入上述我的Index()方法。 执行将到达“ await”关键字,并在另一个线程上启动数据获取过程。 原始的“ ASP.NET”线程将返回调用我的处理程序方法的代码,并将Task类的实例作为返回值。 调用我的处理程序方法的基础结构代码将继续在原始的“ ASP.NET”线程上运行,直到达到需要使用实际ActionResult对象(例如,呈现页面)的程度。 然后,调用者将使用Task.Result成员访问此对象,这将使它(即“ ASP.NET”线程)等待上述步骤3中隐式创建的线程。 与没有等待/异步的同一件事相比,我看不到这完成了什么,除了我认为是琐碎的两件事: 由await创建的调用者线程和工作线程可以并行运行一段时间(上述#5的“直到”部分)。我的预感是这段时间很小。当基础结构调用控制器方法时,我认为它通常需要控制器调用的实际ActionResult才能做更多(如果有的话)。 有一些有用的新基础结构与超时和取消长时间运行的异步控制器操作有关。 添加异步控制器方法的目的应该是释放那些ASP.NET辅助线程以实际响应HTTP请求。这些线程是有限的资源。不幸的是,我没有看到文章中建议的模式实际上如何用于保存这些线程。即使这样做,并且以某种方式将处理请求的负担转移到了一些非ASP.NET线程上,那又完成了什么呢?碰巧能够处理HTTP请求的线程与一般线程有很大不同吗?

1
将ASP.NET IdentityUser与我的其他实体分开
我有一个ProjectName.Core库,其中包含我的所有业务逻辑以及我的实体及其行为。当前与Entity Framework或任何其他DAL没有任何关系,因为我喜欢将这些内容分开。实体框架配置(使用Fluent API)位于ProjectName.Infrastructure项目中,以便将实体推入EF。基本上,我会朝着类似洋葱的架构的方向发展。 但是,将ASP.NET Identity框架添加到组合中时,我必须使我的ApplicationUser实体从IdentityUser该类继承,但是我的ApplicationUser类与其他实体有关系。在继承时,IdentityUser我在实体项目中引入了对Entity Framework的引用,这是我不想这样做的地方。将ApplicationUser类从实体项目中拉出并放入Infrastructure项目中(因为它使用的是基于Entity Framework的身份系统)将导致循环引用,因此也不可行。 有没有什么办法可以解决,所以除了不使用ASP.NET Identity之外,我还可以保持两层之间的清晰分隔?

2
在ASP.NET MVC中,视图模型是否应具有ID?
在开发允许更新模型的ASP.NET MVC应用程序时,您需要某种方式来了解如何获取更新的视图模型并将其与现在更新的模型匹配。似乎有几种不同的方法可以做到这一点,我想知道这些方法中是否有任何一种不正确的MVC(就像让控制器存储应在模型中存储的数据是不正确的MVC)? 所有视图模型都有一个ID:优点 始终确保可以匹配您的模型。 缺点 您必须非常小心,不要更改任何ID,否则您可以让用户更新他们不应该访问的行。 只有最基本的视图模型具有ID:优点 避免用户更新他们不应访问的数据所需的检查要少得多。 缺点 跟踪哪种视图模型与哪种模型匹配要困难得多。 您仍然必须检查一些具有ID的视图模型,以确保用户不会更新他们不应该访问的数据。 没有视图模型具有ID: 优点 无需检查ID以进行更新。 缺点 您必须放弃无国籍状态。 所以我有两个问题。 首先,是否有正确/错误的选择?(如果不是,则表示选择只是一个见解,我的第二个问题是基于见解,应该忽略。) 其次,如果有正确/错误的选择,那是什么? 为了澄清评论,我在说的是当您拥有一个类似于数据库对象的视图模型时。 认为: public class InvoiceViewModel //Does not have ID, does not relate to model. { public CustomerViewModel CustomerVM { get; set; } //Maybe has ID? Does relate to model. public AddressViewModel …
11 mvc  asp.net-mvc 

1
MVC + 3层;ViewModels在哪里发挥作用?
我正在使用ASP.NET MVC 4设计一个三层应用程序。我使用以下资源作为参考。 CodeProject:MVC + N层+实体框架 在ASP.NET MVC中分离数据访问 到目前为止,我有以下目的。 表示层(PL) (主MVC项目中,中号的MVC被转移到数据访问层): MyProjectName.Main Views/ Controllers/ ... 业务逻辑层(BLL): MyProjectName.BLL ViewModels/ ProjectServices/ ... 数据访问层(DAL): MyProjectName.DAL Models/ Repositories.EF/ Repositories.Dapper/ ... 现在,PL引用BLL,而BLL引用DAL。这样,下层不依赖于其上一层。 在这种设计中,PL调用BLL的服务。PL可以将视图模型传递给BLL,而BLL可以将视图模型传递回PL。 同样,BLL调用DAL层,而DAL层可以将模型返回给BLL。BLL可以依次构建视图模型并将其返回给PL。 到目前为止,这种模式一直在为我工作。但是,我遇到了一个问题,其中某些ViewModel需要在多个实体上进行联接。在普通的MVC方法中,在控制器中,我使用LINQ查询执行joins,然后执行select new MyViewModel(){ ... }。但是现在,在DAL中,我无法访问在(在BLL中)定义ViewModel的位置。 这意味着我无法在DAL中加入联接并将其返回给BLL。看来我必须在DAL中进行单独的查询(而不是在一个查询中进行联接),然后BLL将使用这些结果来构建ViewModel。这非常不方便,但是我不认为我应该将DAL暴露给ViewModels。 有什么想法可以解决这个难题吗?谢谢。

4
没有有关其设计或架构的文档,开源项目如何成功?
我想通过研究著名的开源项目来提高自己的编程技能,但是我发现仅跳入其源代码很容易迷路。 因此,我决定阅读有关其设计或体系结构的文档(例如UML图),以便首先了解其代码的组织结构。但是,令我惊讶的是,我找不到大型的开源项目(例如Hibernate,Spring,ASP.NET MVC,Rails等)的任何体系结构文档。 因此,我开始怀疑:如果新来的开发人员没有要阅读的体系结构/设计文档,或者项目经理只是打开源代码但关闭了文档,那么开源项目如何成功?

4
单元测试要走多远
之前曾多次问过一个问题,但twds mvc开发有特定的倾向。 我一直是一个非常好的男孩,并且一直用相应的单元测试来编码我的所有控制器动作,这非常好(如果有时[读很多]重复的话)。老实说,我实际上已经创建了一个T4模板来编写初始单元测试的大部分裸露的骨骼,然后根据使用情况进行适当的调整。我承认我不太确定如何在包含局部视图的视图中处理测试-但这是另一个问题。 现在,我难以决定的部分就是服务层应该覆盖的深度。原因是我的某些服务方法(无论好坏)实际上执行各种linq查询,然后将谨慎的信息提供给方法中的后续逻辑。我知道我可以(应该??)分解这些方法,以便仅为每个linq语句调用所需的逻辑,然后将其应用到该方法中。但是,在许多情况下,永远不会重复使用linq'functions',因此感觉这会将代码重构的程度过高。 我要问的是,在方法中发生复杂的逻辑时,是否有一种“足够好”的测试方法来简单地声明所需的结果和/或预期的错误,或者是否应该同时模拟和测试每条逻辑线。按照我的观察方式,正确进行测试,然后方法逻辑(逐行)也应具有某种覆盖率。但是(以我的幼稚观点),这可能导致试图保持测试和所实施的方法如此紧密一致(我知道他们应该如此)以至于在测试本身中创建家庭行业的循环永无止境。 我知道我的问题可能会激怒TDD的一些奉献者,他们会认为这是毫无道理的。不在TDD阵营中,这对我来说是“是明智的选择”,因此是一个问题。 顺便说一句-检查了这个想法: http://dotnetslackers.com/articles/aspnet/Built-in-Unit-Test-for-ASP-NET-MVC-3-in-Visual-Studio-2010-Part-1.aspx 现在展望稳步下降:) [编辑] -为单身人士(现在是单身!)的“亲密”选民提供好处。这个问题不是主观的。我正在寻找一个非常集中的主题的共识。我不是想激起负面的热情,我不是要揭露技术的缺陷-我是一个巨大的粉丝。因此,请在投票结束时发表有礼貌的评论,以使我受益,因为如果有歧义或错误信息,这可能有助于我重新构造问题。这个问题可能会使大部分的mvc受益。 谢谢!! 吉姆
11 c#  .net  asp.net-mvc 

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.