2015-10-20 76 views
0

这里是(略)的方法,其看起来如下:MVC - 无法传递参数与RedirectToAction

 [HttpPost] 
     public ActionResult SearchForCompanies(FormCollection collection) 
     { 
      CompanySearch search = new CompanySearch(); 

      search.CompanyList = CompanyData.GetList(); 

      return this.RedirectToAction("SearchForCompanies", "Company", new {companySearch = search}); 
     } 

的方法,上述被重定向到下面的方法在同一个控制器:

[HttpGet] 
    public ActionResult SearchForCompanies(CompanySearch companySearch) 
    { 
     if (companySearch == null) 
      companySearch = new CompanySearch(); 

     ... 
     ... 

     return View(companySearch); 
    } 

在重定向上,SearchForCompanies的HTTPGet版本正在成功调用。但是,companySearch参数的值始终为NULL,即使在进行重定向调用时它有一个值。所以我不能正确传递参数。

+1

您无法通过一个复杂的对象的方式。你可以使用'return RedirectToAction(“SearchForCompanies”,“Company”,search);'但是如果'CompanySearch'的任何属性包含复杂对象或集合的属性(它看起来像是你的情况),它会失败,总会有超出查询字符串限制并抛出异常的风险 –

+0

谢谢。我应该知道,因为我之前遇到过这种情况。如果把它写成答案,我会接受它。 –

回答

1

为了通过一个复杂的对象的操作方法,就可以使用

CompanySearch search = new CompanySearch(); 
return RedirectToAction("SearchForCompanies", "Company", search); 

这将串行化的CompanySearch所有属性查询字符串参数。然而,这将

  1. 创建一个丑陋的URL
  2. 罚球是超出异常的查询字符串限制,
  3. 如果任何模型的特性是复杂的对象或这似乎是 集合失败与你的财产的情况下 CompanyList(查询字符串变得像 ...&CompanyList=System.Collections.Generic.List<...>&...