C# 如何在.NETMVC中将表单值传递给控制器
在ASP.net MVC中: 我应该/可以如何将表单数据(从视图)传递给控制器 这就是我前进的方向: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对象以及页码(就像现在一样) 以下是我的代码片段: 控制器
- 控制器索引函数将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)
上面的代码按原样工作