网站建设运行问题及建议,百度竞价排名是以什么形式来计费的广告?,群晖 wordpress 端口 转发,桂林生活网官网首页本文提供了一些代码设计准则#xff0c;目标是帮助ASP.NET MVC 开发人员创建可靠的应用程序#xff0c;当然#xff0c;你可根据实际应用程序选择合适的标准。本文由EntLib.com 小组翻译#xff0c;欢迎分享和交流ASP.NET MVC 项目开发设计思路。 Model建议 - Model Recomm… 本文提供了一些代码设计准则目标是帮助ASP.NET MVC 开发人员创建可靠的应用程序当然你可根据实际应用程序选择合适的标准。本文由EntLib.com 小组翻译欢迎分享和交流ASP.NET MVC 项目开发设计思路。 Model建议 - Model Recommendations Model是定义业务领域相关的对象应该包含业务逻辑对象如何动作和关联验证逻辑验证对象的有效值数据逻辑数据对象如何持久化和会话逻辑跟踪用户状态。 创建独立的Model项目在ASP.NET MVC 项目中引用Model程序集。 将所有业务逻辑放置在Model中。 如将所有业务逻辑放置在Model项目中可根据实际业务数据来生成View和Controller。有如下好处 减少重复的业务逻辑。在View中减少业务逻辑View易于理解。业务逻辑的测试仅仅和Model有关。 例如下面需要显示用户的用户名 – 先显示Last Name在View中代码如下% if (String.Compare((string)TempData[displayLastNameFirst], on) 0) { % Welcome, % Model.lastName%, % Model.firstName% % } else { % Welcome, % Model.firstName% % Model.lastName% % } % 然而你需要在每一个地方重复这一逻辑。如将这一业务逻辑放置在Model中可在Model中添加一个属性封装这一逻辑。public string combinedName{ get { return (displayLastNameFirst ? lastName firstName : firstName lastName); } private set { ; }}这样可大大简化视图代码 % Welcome, % Model.combinedName % % 将所有验证逻辑放置在Model中 所有输入验证应该在Model层包括Client-side 验证。 可使用ModelState 添加验证检查代码如下所示 if (String.IsNullOrEmpty(userName)) { ModelState.AddModelError(username, Resources.SignUp.UserNameError); } 不过更好的办法是使用 System.ComponentModel.DataAnnotations在Model类的属性上添加attribute如下所示 public class User { [Required(ErrorMessageResourceName nameRequired, ErrorMessageResourceType typeof(Resources.User))] public String userName { get; set; } ... } 为数据访问定义接口 接口用来暴露数据访问类的方法强化ASP.NET MVC 的松散耦合设计。 可考虑使用Entity Framework 或 LINQ to SQL 创建对数据库的访问类Entity Framework 和 LINQ to SQL 都支持存储过程。 将所有会话逻辑放置在Model中。 View 建议 - View Recommendations View用来展示Model数据Controller负责选择View。业务逻辑不属于ViewModel负责业务逻辑。View非常灵活如Model的View可通过HTML显示同样的Model也可通过XML 视图来呈现。 将HTML放置在View和Partial View中不要在Controller中 默认的ASP.NET视图引擎提供了如下视图文件HTML View.aspxPartial HTML View.ascx和Master page.master 如下视图演示了对partial view的调用 % Page Title LanguageC# MasterPageFile~/Views/Shared/Site.Master InheritsSystem.Web.Mvc.ViewPage % … Below is a list of items submitted by b % Html.Encode(ViewData[name]) %/b. p ... div iditems % Html.RenderPartial(ItemsByName);% /div /asp:content Partial viewItemsByName.ascx如下所示 % Control LanguageC# % … % foreach (Seller.Controllers.Items item in (IEnumerable)ViewData.Model) { % tr td % Html.Encode(item.title)% /td td % Html.Encode(item.price)% /td /tr % } % /table % } % Partial View 是一个强大的扩展和重用机制。你可在不同的地方包含相同的View不必编写重复的代码。 在View中使用ViewData访问数据 ASP.NET 提供了如下机制在View模板中访问数据 ViewData.Model 对象 – 在Controller的action方法中在return语句中传入一个Model对象return View(myModelObject)。 ViewData Dictionary – 在action方法中存入数据ViewData[“key”] value接着在View中方法相同的dictionary。 在可能的情况下应该是一ViewData Model而不是ViewData 来访问数据因为Model 提供了类型安全。此外你应在View模板中使用数据访问机制而不是Request / Session 来访问。 如需要显示一个对象的多个属性可使用ViewData.Model并创建一个强类型View。针对seller详细页面seller类有name、phone、address、email等等属性在呈现View之前你可在Controller中对ViewData.Model 赋值seller对象实例。但是如果是一些零散的数据如page#、用户名和current time则一般使用ViewData字典。 在使用模型绑定Model bingding时避免在view中访问数据。 在Controller 中访问数据库在执行View之前将从数据库中检索的数据复制给轻量的View Model对象这样轻量的View Model对象不必在视图执行时检索数据。 使用自动生成客户端验证 从ASP.NET MVC 2 开始可以很容易添加客户端验证。 (1) 如前所述在Model层中添加数据验证逻辑 (2) 确保项目中Scripts目录有如下javascript 文件MicrosoftAjax.js 和 MicrosoftMvcValidation.js (3) 在表单提交页面添加如下代码 script src% Url.Content(~/Scripts/MicrosoftAjax.js) % typetext/javascript/script script src% Url.Content(~/Scripts/MicrosoftMvcValidation.js) % typetext/javascript/script (4) 在表单中添加如下代码 % Html.EnableClientValidation(); % 现在如果编辑表单内容当输入值不合格时客户端马上进行验证提醒。 在模板中插入server-side 注释 在View模板中使用服务端注释在HTML呈现时会剔除。 如下是server-side注释 %-- This is a server side template comment --% 不要在View模板中使用HTML 注释因为这些注释会呈现在web浏览器中可被用户看到。 使用HTMLHelper 扩展方法。 System.Web.Mvc.Html 类中包含了很多有用的HTML 扩展方法。 Form 表单生成BeginForm 输入字段生成checkbox、hidden、radio button、textbox 链接URL生成ActionLink XSS保护Encode 尽可能使用这些HTML扩展方法如下是使用route table创建一个链接 % Html.ActionLink(“Home page”, “Default”) % 后续相关文章可参考如下链接 ASP.NET MVC 最佳开发实践2ASP.NET MVC 最佳开发实践3 英文原文链接 Best Practices for ASP.NET MVChttp://blogs.msdn.com/b/aspnetue/archive/2010/09/17/second_2d00_post.aspx 转载于:https://www.cnblogs.com/rickie/archive/2011/05/03/2035877.html