Asp.net mvc 使用asp.net mvc时的经验教训或错误

Asp.net mvc 使用asp.net mvc时的经验教训或错误,asp.net-mvc,Asp.net Mvc,在启动asp.net mvc时,您会向刚开始的人强调哪些经验教训,以便他们避免这些错误?不要忘记模式中的“单元测试”部分。控制器名称:) 单元测试模式不要使用表单集合,使用模型绑定 尝试不使用ViewData,创建ViewModel 如果视图中有循环或If,请编写HTML帮助程序 善良 Dan尝试始终使用ViewModel在控制器和视图之间传递数据。 你可能认为你不需要,你可以把你的模型传给别人,但是突然你需要一个列表框,里面有几个选项来编辑一个模型,或者显示一条消息(不是验证消息),然后你开始

在启动asp.net mvc时,您会向刚开始的人强调哪些经验教训,以便他们避免这些错误?

不要忘记模式中的“单元测试”部分。

控制器名称:)


单元测试模式

不要使用表单集合,使用模型绑定

尝试不使用ViewData,创建ViewModel

如果视图中有循环或If,请编写HTML帮助程序

善良


Dan

尝试始终使用ViewModel在控制器和视图之间传递数据。 你可能认为你不需要,你可以把你的模型传给别人,但是突然你需要一个列表框,里面有几个选项来编辑一个模型,或者显示一条消息(不是验证消息),然后你开始向ViewData中添加项目,用魔术字符串作为键,这使得应用程序更难维护。 使用ViewModel还可以解决一些安全问题。 例如:

class user:
int id
string name
string email
string username
string password
您的视图允许用户更改其姓名和电子邮件,并发布到操作

public ActionResult Edit(User user)
{
--persist data
}
有人可能会篡改您的表单并发布新密码和用户名,您需要非常小心DefaultBinder的行为。 现在,如果您使用以下ViewModel:

class userEditViewModel:
int id
string name
string email
问题解决了。

  • 只要有可能,请键入视图

  • 在你的观点中避免逻辑

  • 远离HttpContext

      • 在打印数据的任何地方使用Html.Encode(),除非您有很好的理由不这样做,这样您就不必担心XSS
      • 不要将路由硬编码到视图或Java脚本中——它们在某个时候会发生变化,请改用Url.Action()
      • 不要害怕使用局部视图
      • MVC不是银弹,首先评估它是否是解决问题的最佳工具
    • 获取Pro ASP.NET MVC框架

    • 调试到


    • 不要让你的控制器变成胖子,做太多的工作。我在过去见过1000多个线路控制器,要知道发生了什么,这简直是一场噩梦

      对控制器使用单元测试,以确保依赖关系得到控制,并且代码是可测试的

      不要让jQuery和奇特的clientscript定义应用程序的行为,尽量少用它,让它增强应用程序

      尽可能使用局部视图和HTML帮助程序,以确保您的视图不会变得笨拙和成为维护的噩梦

      尽可能使用ViewModel


      使用依赖项注入框架来处理您的依赖项(MvcContrib有几个控制器工厂,尽管它很简单,可以自己运行)。

      为站点的每个部分(例如,主页、帐户)使用不同的控制器

      了解如何使用ViewData和TempData

      了解RenderPartial的用途
    • 如果为单个参数方法创建一个参数名称与id不同的控制器方法,则必须创建一个新路由。只要咬紧牙关,使用id(它不关心类型)并在评论中解释它
    • 确保使用
      重定向到操作
      命名参数:

      返回RedirectToAction(“DonateToCharity”,new{id=1000})


    将javascript放在单独的文件中,而不是放在查看页面中

    任何使用SO的人都应该学到的一个教训是:一些问题是Wiki!推荐阅读:获取关于ASP.net MVC中模式和反模式的演示文稿:为什么不排除action过滤器上的“用户名”和“密码”?或者只使用您想要更新的字段列表来更新模型?这非常有效,但您可以忘记这样做,一些新开发人员可能不知道这一点,因为这并不明显。使用ViewModels几乎不可能失败。为什么?如果我需要在视图页面中分配js变量,该怎么办?i、 e.当前项目的id,或某些生成的url?我同意大多数javascript(函数)应该在*.js文件中,但很多变量、本地化消息等都可以在cshtml/ascx中生成(如果可能的话,都可以在一个局部视图中生成,这是布局的一部分)