• 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提交的时候处理请求,这样就不会发生歧义了。

  • 相关阅读:
    C#操作配置文件
    IIS的启动与停止命令
    我的SQL里哪个语句占用的CPU最多?
    Redis 安装
    redis启动出错Creating Server TCP listening socket 127.0.0.1:6379: bind: No error
    多线程和异步
    mvc 使用Newtonsoft.Json进行序列化json数据
    深入理解JavaScript Hijacking原理
    C#中的partial class(部分类)
    在ASP.NET MVC中使用DropDownList
  • 原文地址:https://www.cnblogs.com/nivi3000/p/4957636.html
Copyright © 2020-2023  润新知