Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在.NETMVC中将表单值传递给控制器_C#_Asp.net Mvc_Request - Fatal编程技术网

C# 如何在.NETMVC中将表单值传递给控制器

C# 如何在.NETMVC中将表单值传递给控制器,c#,asp.net-mvc,request,C#,Asp.net Mvc,Request,在ASP.net MVC中: 我应该/可以如何将表单数据(从视图)传递给控制器 这就是我前进的方向: 控制器索引函数将ViewModel对象传递给视图 ViewModel对象包含分页列表以及一些SelectList。 _ViewModel对象还包含一个名为Filter的自定义类I。此类的目的是保存通过表单从视图发布的筛选信息 我想让Index[AcceptVerbs(HttpVerbs.Post)]函数接收填充了表单数据的Filter对象以及页码(就像现在一样) 以下是我的代码片段: 控制器

在ASP.net MVC中:

我应该/可以如何将表单数据(从视图)传递给控制器

这就是我前进的方向:

  • 控制器索引函数将ViewModel对象传递给视图
  • ViewModel对象包含分页列表以及一些SelectList。 _ViewModel对象还包含一个名为Filter的自定义类I。此类的目的是保存通过表单从视图发布的筛选信息
  • 我想让Index[AcceptVerbs(HttpVerbs.Post)]函数接收填充了表单数据的Filter对象以及页码(就像现在一样)
以下是我的代码片段:

控制器/索引回发功能:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Index(int? page, CaseFilter caseFilter)
    {
        const int pageSize = 10;
        var cases = caseRepo.FindAllCases();
        var paginatedCases = new PaginatedList<Case>(cases, page ?? 0, pageSize);
        return View(new CaseIndexViewModel(paginatedCases, caseFilter));
    }
和ViewModel类:

    public class CaseIndexViewModel
    {
    public PaginatedList<Case> PaginatedCases { get; private set; }
    public CaseFilter CaseFilter { get; private set; }

    public CaseIndexViewModel(PaginatedList<Case> paginatedCases, CaseFilter caseFilter)
    {

       PaginatedCases = paginatedCases;
       CaseFilter = caseFilter;
    }
}
公共类CaseIndexViewModel
{
public paginedlist paginedcases{get;private set;}
公共CaseFilter CaseFilter{get;private set;}
public CaseIndexViewModel(分页列表分页案例、案例过滤器案例过滤器)
{
PaginatedCases=PaginatedCases;
CaseFilter=CaseFilter;
}
}
基本上,我试图避免使用Request.Form来填充过滤器类,至少不要在控制器中使用它

欢迎任何帮助、建议或意见

[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Index(FormCollection collection)
    {
         string valueFromNameTextBox = collection["name"];
    }
您可以使用表单上所有输入的名称索引到此集合


您可以使用表单上所有输入的名称索引到此集合。

我不再使方法签名复杂化,而是开始使用ValueProvider属性并在控制器中尝试/UpdateModel来检索表单/路由值,除非这些值是简单的属性。另一方面,我可能也不会将过滤器部分作为视图的模型——我倾向于对页面的模型有一个更狭隘的概念,希望它是业务模型,而不是页面上所有数据的模型--并且只需通过ViewData传递筛选值。

而不是使我的方法签名复杂化,我开始使用ValueProvider属性,并尝试在控制器中使用/UpdateModel来检索表单/路由值,除非这些值是简单属性。另一方面,我可能也不会将过滤器部分作为视图的模型——我倾向于对页面的模型有一个更狭隘的概念,希望它是业务模型,而不是页面上所有数据的模型,并且只需通过ViewData传递筛选值。

要扩展BFree的答案,您可以通过以下操作遍历表单中的所有元素:

foreach (string key in collection.keys) {
   if (key.contains("blah"))
      text1 = collection[key];
}

如果它的key.contains If元素太多,它可能会变得有点难看,所以要小心;)

要扩展BFree的答案,您可以通过如下操作遍历表单中的所有元素:

foreach (string key in collection.keys) {
   if (key.contains("blah"))
      text1 = collection[key];
}

如果它的key.contains If元素太多,它可能会变得有点难看,所以要小心;)

最后,我甚至不需要使用请求集合。CaseFilter对象是在我将其设置为中的参数时自动填充的

public ActionResult Index(int? page, CaseFilter caseFilter)

上面的代码按原样工作。

最后,我甚至不需要使用请求集合。CaseFilter对象是在我将其设置为中的参数时自动填充的

public ActionResult Index(int? page, CaseFilter caseFilter)
上面的代码按原样工作