【问题标题】:How to access my formcollection in action method ASP.NET mvc ?如何在操作方法 ASP.NET mvc 中访问我的表单集合?
【发布时间】:2019-04-12 17:52:15
【问题描述】:

我在 action 方法中访问了表单集合,但是如何获取它的值。我试过这样

string value = collection[1];

但我没有得到值。如何在操作方法中访问值。

【问题讨论】:

  • michael,能否请您将我的答案标记为正确,我不喜欢有 66 名声望 :)
  • 多关注帮助别人,少关注认可,你会没事的......

标签: asp.net-mvc


【解决方案1】:

如果你有:

<input type="text" name="inputName" />

您可以使用元素的属性名称,如下所示:

[HttpPost]
public ActionResult yourAction(FormCollection collection)
{
     string value = Convert.ToString(collection["inputName"]);
     ...
     return View();
}    

【讨论】:

  • 对我有用,与我会问的问题完全相同。
【解决方案2】:

如果可以的话,我认为您应该尝试避开 formcollection 对象,以支持强类型视图模型。这里有一些关于 SO 的示例,我已经链接了我搜索的第一个示例:

passing FormCollection to controller via JQuery Post method and getting data back...

但是,如果您热衷于将自己打结:),那么这里有一个通过表单集合进行迭代的示例:

http://stack247.wordpress.com/2011/03/20/iterate-through-system-web-mvc-formcollection/

【讨论】:

  • 如果表单已知 - 您无法创建模型。您需要遍历集合以获取值。
【解决方案3】:

类似(代码未测试) -

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AddNewLink(FormCollection collection)
{
    string url = collection[1].ToString();
}

【讨论】:

    【解决方案4】:

    创建这样的视图

    <form action="/myController/myAction" method="post">
    User Name <input type="text" name="userName" /> <br>
    Country <input type="text" name="country" /><br>
    <input type="submit" value="submit" />
    </form>
    

    创建如下操作

    public ActionResult myAction(string userName, string country){
          //do some thing with userName
          //asp.net mvc3 has automatically bind that for you
    }
    

    注意:上面写的代码不是推荐的做事方式,只是为了演示。

    【讨论】:

      【解决方案5】:

      请试试这个例子,希望对你有所帮助...

       public class UserName
          {        
             public string FName { get; set; }
             public string LName{ get; set; }               
          }
      
      
              [HttpGet]
              public ActionResult FormCollectionEg()
              {
                  return View();
              }
      
              [HttpPost]
              public ActionResult FormCollectionEg(FormCollection data)
              {
                  UserName UserObj = new UserName();
                  UserObj.FName = data["fname_name"];
                  UserObj.LName = data["lname_name"];
                  return  RedirectToAction("DisplayFormCollectionData", UserObj);           
              }
      
      
              public ActionResult DisplayFormCollectionData(UserName reg)
              {
                   return View(reg);
              }
      

      创建两个视图 - DisplayFormCollectionData FormCollectionEg

      DisplayFormCollectionData

      @model YourProjectNamespace.Models.UserName
      
      @{
          Layout = null;
      }
      
      <!DOCTYPE html>
      
      <html>
      <head>
          <meta name="viewport" content="width=device-width" />
          <title>DisplayFormCollectionData</title>
      </head>
      <body>
          <div>
              <h4>User Deatails</h4>
              <hr />
              <dl class="dl-horizontal">
                  <dt>
                      @*@Html.DisplayNameFor(model => model.FName)*@
                      First Name....
                  </dt>
      
                  <dd>
                      @Html.DisplayFor(model => model.FName)
                  </dd>
      
                  <dt>
                      @*@Html.DisplayNameFor(model => model.LName)*@
                      Last Name...
                  </dt>
      
                  <dd>
      
                      @Html.DisplayFor(model => model.LName)
                  </dd>
      
              </dl>
          </div>
          <p>
              @*@Html.ActionLink("Edit", "Edit", new { /* id = Model.PrimaryKey */ }) |
              @Html.ActionLink("Back to List", "Index")*@
          </p>
      </body>
      </html>
      

      FormCollectionEg-

      @{
          Layout = null;
      }
      
      <!DOCTYPE html>
      
      <html>
      <head>
          <meta name="viewport" content="width=device-width" />
          <title>FormCollectionEg</title>
      </head>
      <body>
          @using (Html.BeginForm("FormCollectionEg", "Home"))
          {
              <table>
                  <tr>
                      <td>Enter First Name</td>
                      <td><input type="text" id="fname_id" name="fname_name" /></td>
                  </tr>
                  <tr>
                      <td>Enter Last Name</td>
                      <td><input type="text" id="lname_id" name="lname_name" /></td>
                  </tr>
                  <tr>
                      <td></td>
                      <td><input type="submit" /></td>
                  </tr>
              </table>
      
      
      
          }
      
      </body>
      </html>
      

      【讨论】:

        【解决方案6】:

        我的首选是使用UpdateModel

        这个 MVC 方法不是手动映射字段,而是自动绑定请求中可用数据的属性,就像您将严格类型作为参数传递给操作一样。

        [HttpPost]
        public ActionResult FormCollectionEg()
        {
            var model = new Username();
        
            UpdateModel<Username>(model);
        
            return View(model);
        }
        

        上面的代码将包含来自 QueryString 的数据以及可能不合适的表单数据。如果您在操作中使用参数,则可以使用 [FromBody] 来限制这一点,但使用 UpdateModel 您仍然可以通过将 FormCollection 作为值提供者传递来实现相同的目的。

        [HttpPost]
        public ActionResult FormCollectionEg(FormCollection collection)
        {
            var model = new Username();
        
            UpdateModel<Username>(model, collection);
        
            return View(model);
        }
        

        【讨论】:

          【解决方案7】:

          查看您的 HTML 文件(或使用检查元素)以查看输入字段中的名称属性。 例如,如果你有

          <input type = "text" name = "YourName"/>
          

          在控制器中,

          [HttpPost]
          public ActionResult ActionName(FormCollection fc)     /*Using FormCollection*/
                  {
                          string variable_name = fc["YourName"];
                          return View();
                  }
          

          FormCollection 是在控制器中检索视图数据的一种方式。根据输入中值的类型,您可以在 Action 方法中将其非字符串值解析为字符串。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-02-26
            • 1970-01-01
            • 2013-12-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多