2016-03-04 61 views
0

我正在从MVC 5将项目升级到MVC 6,并且发现FormCollection没有被填充(即返回null值)一个AJAX帖子。ASP.NET MVC 6 FormCollection没有在AJAX post中填充

数据正在向下发送正确的线:

Form post data

在控制器中的方法的签名是:

public string processform(FormCollection formCollection) 

我可以以这种方法,该方法是设置一个断点当表单数据被提交时命中,但formCollection对象为空。

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

回答

1

this问题:

  1. 要:

    的FormCollection作为参数不被MVC 6支持(还)

    您可以使用以下两种方法做到这一点根据此读取异步值article

  2. 创建您自己的模型绑定器参见here
+0

你给我的建议让我得到更好的整体答案,所以谢谢你。 – CrispinH

0

扎基的帖子我走上一条路径,我结束了这段代码的工作原理:

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

虽然与ASP.NET 5版/酷睿1.0 MVC 6等的快速变化的步伐,事情可能会改变。

0

我通过使用HttpContext阅读表单数据和任何附加到正在提交的表单的文件。 例:

[HttpPost] 
    public void EditProperty() 
    { 
     var isFeatured = HttpContext.Request.Form["isFeatured"]; 
     var files = HttpContext.Request.Form.Files; 
     foreach (var file in files) 
     { 
      if (file.Length > 0) 
      { 
       System.Console.WriteLine(file.FileName); 
       System.Console.WriteLine("This file is featured:" + isFeatured.ToString()); 
      } 
     } 
    } 

在上述“isFeatured”的例子是,我使用jquery加入FORMDATA一个键。我希望这对你有一些帮助。

0

确保您的输入字段具有“名称”属性。