.net核心为什么我可以通过密钥单独获得IFormCollection

use*_*830 6 .net c# asp.net-core

让我说我有一个

<form method="post" action"/user/create">
    <input type="text" name="FirstName" placeholder="FirstName" />
    <button type="submit">Submit</button>
</form>
Run Code Online (Sandbox Code Playgroud)

我想在我的action方法中访问我的输入值FirstName.

public IActionResult Create(IFormCollection form)
{
    string FirstName = form.Keys["FirstName"];
    return View();
}
Run Code Online (Sandbox Code Playgroud)

它给出错误"无法将[]索引应用于ICollection类型的表达式"

我知道我可以迭代并输入一个if语句,但我发现需要这么多代码.我刚刚开始学习c#,但在Node.js和Python中很容易获得表单的值,例如在节点中.

request.body.FirstName;
Run Code Online (Sandbox Code Playgroud)

而已.我正在寻找类似的东西,没有迭代或创建一个poco类.

谢谢.

mae*_*lin 12

简单的答案

你可以使用form["FirstName"]form.Get("FirstName").


编辑:你提到过,你不想创建一个poco.但是,如果你有多个参数,请考虑一下:

原创内容:

我更喜欢创建一个类(如person,具有FirstName属性)并使用内置序列化的优势.

如果您的表单参数如下所示:

{
  "FirstName": "John",
  "LastName": "Doe"
}
Run Code Online (Sandbox Code Playgroud)

然后你的班级应该是:

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

你的创建方法应该是这样的

public IActionResult Create([FromForm]Person p)
{
    string FirstName = p.FirstName;
}
Run Code Online (Sandbox Code Playgroud)

它会自动将表单参数解析为Person对象.

什么干净的阅读形式params,不是吗;-)?