ASP.NET MVC 6 FormCollection未在AJAX帖子中填充

时间:2016-03-04 16:14:24

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

我正在从MVC 5将项目升级到MVC 6,并且发现 FormCollection 没有使用来自AJAX帖子的数据填充(即返回空值)。 / p>

数据正在正确发送:

Form post data

控制器中方法的签名是:

public string processform(FormCollection formCollection)

我可以在此方法中设置断点,在提交表单数据时会触发该断点,但 formCollection 对象为空。

鉴于此代码在较低版本的MVC中运行良好,我们是否必须在MVC 6中做一些不同的事情才能实现?

4 个答案:

答案 0 :(得分:1)

根据this问题:

  

MVC 6

不支持FormCollection作为参数

您可以使用以下两种方式来实现:

  1. 根据此article
  2. 读取值async
  3. 创建自己的模型活页夹,请参阅here

答案 1 :(得分:1)

Zaki的帖子让我走上了一条小路,我最终得到了这个有效的代码:

    [ValidateAntiForgeryToken]
    [HttpPost]
    [AllowAnonymous]
    public async Task<string> processform()
        {
        var objFormCollection = await HttpContext.Request.ReadFormAsync();
        ...
        }

虽然随着ASP.NET 5 / Core 1.0 MVC 6等的快速变化,但事情可能会再次发生变化。

答案 2 :(得分:0)

我使用HttpContext读取表单数据和附加到表单的任何文件,这些文件正在提交。 例如:

exports.search = function (req, res) {
  if (!req.query.q) return res.status(400).send('No Query Provided')
  log.error(req.query.q)
  User.search({query_string: {query: req.query.q}}, (err, results) => {
    if (err) return handleError(res, err)
    var ret = _.map(results.hits.hits, result => ({
      userID: result._id,
      _score: result._score,
      name: result._source.name,
      loc: result._source.loc,
      info: result._source.info,
      images: result._source.images
    }))
    return res.send(ret)
  })
}

在上面的示例中,“isFeatured”是我使用jquery添加到formData的键。我希望这对你有所帮助。

答案 3 :(得分:0)

确保您的输入字段具有&#39;名称&#39;属性。