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

时间:2017-08-17 03:02:40

标签: c# .net asp.net-core

让我说我有一个

<form method="post" action"/user/create">
    <input type="text" name="FirstName" placeholder="FirstName" />
    <button type="submit">Submit</button>
</form>

我想在我的操作方法中访问我的输入值FirstName。

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

它给出了错误&#34;无法使用[]将索引应用于ICollection类型的表达&#34;

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

request.body.FirstName;

多数民众赞成。我正在寻找类似的东西,没有迭代或创建一个poco类。

感谢。

2 个答案:

答案 0 :(得分:7)

简单回答

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

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

原创内容:

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

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

{
  "FirstName": "John",
  "LastName": "Doe"
}

然后你的班级应该是:

public class Person {
  public string FirstName {get;set;}
  public string LastName {get;set;}
}

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

public IActionResult Create([FromForm]Person p)
{
    string FirstName = p.FirstName;
}

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

阅读形式是一种干净的方式,不是吗? - )?

答案 1 :(得分:-1)

根据.NET API Catalog. 你可以用

form["FirstName"]form.item["FirstName"]

通过迭代访问索引值。