zoukankan      html  css  js  c++  java
  • MVC 学习第十节 请求Controller

        其实我们通常遇到的请求方式无非get/post,但是有很多Web开发人员仍然对二者分不清。

        get即通过URL中的QueryString向服务器端传值的方式,它的数据是可见的,可post则是通过一个postdata包向服务器传值,post方式可以传送更多数据(如上传文件),也更安全(如登录)。

        本文将演示各种通过客户端页面(即最终生成的页面)向Controller提交请求以及在Controller中接受的方式。

    约定

        本文所有的示例都将是演示一个登录过程,但并不关注判断过程,所以判断方面仅做简单的IF操作。

        而提交的实体我们新建一个Account类。

    它的内容如下:

     /// <summary>
         /// 用户账户的实体类
         /// </summary>
         public class Account {
             /// <summary>
           /// 用户名
             /// </summary>
            public string UserName { get; set; }
             /// <summary>
            /// 密码
            /// </summary>
            public string Password { get; set; }
        }

    文中大多数示例使用了Account类,但并不是所有的示例都使用了Account。

    在文中我们并不关注提交信息的页面的Controller,仅关注处理信息的Controller。

    而Controller中存在这样一个方法,用于辅助判断:

      /// <summary>
      /// 一个辅助判断的方法
      /// </summary>
      /// <param name="userName">用户名</param>
      /// <param name="password">密码</param>
      /// <returns></returns>
      string AreEquals(string userName,string password)
      {
          return (userName.ToLower() == "admin" && password == "123456").ToString();
       }

    以Post提交的数据来看传递

        之所以这里先说Post是因为相对于Get方式来说Post的情况更全,说明了Post的情况Get也就差不多了。

    View:

    @* 这里说明一下你Html.TextBox("username") 这个输入框的名字要和你定义的Account的UserName 名字相同,忽略大小写,不然程序会出错误*@
    @using (Html.BeginRouteForm(new { controller = "home", action = "process" })) { <p> <label>用户名:</label>@Html.TextBox("username") </p> <p> <label>密码:</label>@Html.TextBox("password") </p> <p> <input type="submit" /></p> }

    1.从最基本的开始,使用Request获取提交的信息

     /// <summary>
     /// 处理请求的Action 
     /// </summary>
     /// <returns></returns>
    public ActionResult Process()
    {
        return Content(
            AreEquals(Request.Form["username"], Request.Form["password"])
            );
    }

        这个无多解释,通过Request.Form来获取表单提交我想是最基本的方法之一,如果您对这种方法不了解的话,那么就说明您的ASP.NET基础有待提交,可以查看ASP.NET五大对象的相关文章。

    2.通过Action参数提交

    相比之下这个可能更加漂亮些。

       1 /// <summary>
       2 /// 处理请求的Action 
       3 /// </summary>
       4 /// <param name="userName">这两个参数务必与表单中的名称一致</param>
       5 /// <param name="password"></param>
       6 /// <returns></returns>
       7 public ActionResult Process(string userName, string password)
       8 {
       9     return Content(
      10         AreEquals(userName, password)
      11         );
      12 }

    3.UpdateModel来获取传递

     /// <summary>
     /// 处理请求的Action 
     /// </summary>
     /// <returns></returns>
       public ActionResult Process()
        {
           var a = new Account();
          UpdateModel(a);//确定a包含Password及UserName这两个属性即可,否则抛出异常
           return Content( AreEquals(a.UserName, a.Password));
        }

    当然我们这里很容易出现异常所以可以使用另一个方法来替代,TryUpdateModel:

     1: /// <summary>
       2: /// 处理请求的Action 
       3: /// </summary>
       4: /// <returns></returns>
       5: public ActionResult Process()
       6: {
       7:     var a = new Account();
       8:     //这样就可以在没有成功转换时使用另一种处理方式
       9:     return Content(
      10:         TryUpdateModel(a))?AreEquals(a.UserName, a.Password):bool.FalseString
      11:         );
      12: }

    上面这种UpdateModel的方法已经很简单了,可是ASP.NET MVC为我们提供了更简单的方式:

    4.使用绑定

       1: /// <summary>
       2: /// 处理请求的Action 
       3: /// </summary>
       4: /// <returns></returns>
       5: public ActionResult Process(Account a)
       6: {
       7:     return Content(
       8:         AreEquals(a.UserName, a.Password)
       9:         );
      10: }

    就是这么简单

    可能存在的问题

    我们在提交表单时可能有多个Account对象,这种情况下我们应该怎么办呢。

    请看下面:

    image

    View:

    @using (Html.BeginRouteForm(new { controller = "home", action = "process" })) {
     <p>
        <label>用户名1:</label>@Html.TextBox("a.username") </p>
     <p>
         <label>密码1:</label>@Html.TextBox("a.password") </p>
            <p>
        <label>用户名2:</label>@Html.TextBox("b.username")</p>
      <p>
         <label>密码2:</label>@Html.TextBox("b.password")</p>
     <p>
         <input type="submit" /></p>
    
        }

    注意这里的表单元素的Name、

    下面是处理的Action代码:

       1: /// <summary>
       2:  /// 处理请求的Action 
       3:  /// </summary>
       4:  /// <returns></returns>
       5:  public ActionResult Process(Account a ,Account b)
       6:  {
       7:   //处理代码
       8:      return View();
       9:  }

    这就一切OK了

  • 相关阅读:
    jQuery 语法
    jQuery 简介
    把数据存储到 XML 文件
    XML 注意事项
    XML DOM (Document Object Model) 定义了访问和操作 XML 文档的标准方法。
    通过 PHP 生成 XML
    XML 命名空间(XML Namespaces)
    XML to HTML
    XMLHttpRequest 对象
    使用 XSLT 显示 XML
  • 原文地址:https://www.cnblogs.com/ayzhanglei/p/2873305.html
Copyright © 2011-2022 走看看