zoukankan      html  css  js  c++  java
  • ASP.NET MVC轻教程 Step By Step 7——改进Write动作方法

    在上一节我们使用强类型视图改进Write视图获得更好的智能感知和代码重构,现在可以进一步的改进动作方法。

    Step 1. 数据模型绑定

    在Save方法中我们使用Request来获取表单传送的值,其实可以将值作为Save的参数传递过来。

            public void Save(string nickname,string content)
            {
                messages.Add(new Message { NickName = nickname, Content = content, ReleaseDate = DateTime.Now });
                Response.Redirect("/Home/Index");
            }

    注意参数名称和Write视图生成渲染的HTML的标签的name属性值要一致,由于HTML不区分大小写,所以这里的参数名的大小写也无所谓。ASP.NET MVC会自动把QueryString或Form获取的值以name值和参数名对应的方式传递。

    不过更好的做法是把Message类的对象作为参数传递过来。如下代码所示。

            public void Save(Message message)
            {
                message.ReleaseDate = DateTime.Now;
                messages.Add(message);   
    Response.Redirect("/Home/Index"); }

    我们可以这样做是因为ASP.NET MVC中有一个Model Binder(数据模型绑定)机制,它会自动将通过QueryString或Form获取的name和值重建成一个模型类对象,并传递给动作方法。这样做的优点依然和强类型视图类似,主要是有智能感知和代码重构时比较方便。

    Step 2. 动作方法的特性

    Write方法负责显示渲染表单,Save方法负责处理表单传递的数据。这样的做法在ASP和php中都很常见,不过每个不同的表单都有不同名称的动作方法,会显得繁琐不够清晰。最好可以使用一个名字,当然不能直接写成两个Write动作方法,不然就会因为重名发生错误。我们可以给动作方法加上特性来区别两个Write。

            [HttpGet]
            public ActionResult Write()
            {
                return View();
            }
    
            [HttpPost]
            public void Write(Message message)
            {
                message.ReleaseDate = DateTime.Now;
                messages.Add(message);    Response.Redirect(
    "/Home/Index"); }

    把Save方法名改成Write,并在两个Write动作方法前分别加上HttpGet和HttpPost特性。前者指定在有人访问页面的时候显示页面,后者是当表单以Post提交的时候处理请求,这样就不会发生歧义了。

  • 相关阅读:
    计算机程序的构造和解释
    StackOverflow之旅<1>------{去掉烦人的"!=null"判断}
    tomcat 启动显示指定的服务未安装
    Sql Server 表的复制
    Sql Server配置管理器与 Sql Server Management Studio
    “因为数据库正在使用,所以无法获得对数据库的独占访问权。”处理
    Win10磁贴 横向排列 增加多行 多列 磁贴横向展示
    解决使用Hyper-v 设置虚拟机网卡出现-从网络文件夹中隐藏
    Hyper-V网络设置(物理机+虚拟机)
    易语言等软件自动获取管理员权限,在64位Windows7系统非管理员帐户中执行
  • 原文地址:https://www.cnblogs.com/nivi3000/p/4957636.html
Copyright © 2011-2022 走看看