你如何在 .NET Core 中获得 post 值

use*_*830 7 .net asp.net-mvc asp.net-core

我有一个具有这两种操作方法的客户控制器。

    [HttpGet]
    public IActionResult Create()
    {
        ViewBag.Title = "Customers";
        return View();
    }

    [HttpPost]
    public IActionResult Create(IFormCollection form)
    {
        return View();
    }
Run Code Online (Sandbox Code Playgroud)

我还创建了一个客户视图。

<form class="form-horizontal" method="post" action="/Customer/Create">
    <div class="form-group">
        <label class="col-lg-2 control-label">FirstName *</label>
        <div class="col-sm-6">
            <input type="text" class="form-control" required name="FirstName">
        </div>
    </div>
    <div class="form-group">
        <label class="col-lg-2 control-label">LastName *</label>
        <div class="col-sm-6">
            <input type="text" class="form-control" required name="LastName">
    </div>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)

我如何获得帖子值?每次我提交表单时,它都会转到[HttpGet]并且我想使用[HttpPost]. 我是 ASP.NET Core 的新手,很抱歉问这个简单的问题。

Ric*_*res 7

几种方式:

  • 向接受帖子的方法添加一个FirstNameLastName(不区分大小写)字符串参数Create
  • 将一个类型的参数添加IFormCollection到这个相同的方法并访问命名的值FirstNameLastName
  • 直接访问值 HttpContext.Request.Form
  • ModelState属性访问值
  • 添加 POCO 类的模型参数,该类包含您要提交的任何值


Shy*_*yju 7

将 2 个参数添加到您的 http post 操作方法中,该参数与您的表单元素名称相匹配。

[HttpPost]
public IActionResult Create(string firstName,string lastName)
{
    return View();
}
Run Code Online (Sandbox Code Playgroud)

另一种选择是创建视图模型类,其属性与表单元素名称匹配。当表单中有许多输入元素并且不想让操作方法的参数列表变得混乱时,这非常有用。

public class LoginVm
{
  public string FirstName { set;get;}
  public string LastName { set;get;}
}
Run Code Online (Sandbox Code Playgroud)

[HttpPost]
public IActionResult Create(LoginVm model)
{
    // to do : user model.FirstName and model.LastName
    return View();
}
Run Code Online (Sandbox Code Playgroud)

提交表单时,模型绑定器将读取发布的表单数据并将其映射到视图模型对象属性值。

请记住,视图模型特定于视图。因此,如果您的视图(表单)发送 5 个字段,请创建一个仅包含这 5 个字段的简单 POCO 视图模型。