AJAX.BeginForm将空FormCollection列表发送到MVC Controller

时间:2012-07-17 20:06:46

标签: asp.net ajax asp.net-mvc-3 ajax.beginform formcollection

我有一个非常简单的代码:

@using (Ajax.BeginForm("SearchAccount", "Account", new AjaxOptions { UpdateTargetId = "SearchResults", HttpMethod = "Get", InsertionMode = InsertionMode.Replace })) 
    {
        <fieldset>
            <input id="txtSearchBox" name="SearchString" type="text"  />
        </fieldset>
        <input type="submit" value="Search"  />
    }

在控制器端我有以下代码

public PartialViewResult SearchAccount(FormCollection formCollection)
    {
        try
        {
            string SearchString = formCollection["SearchString"];
            List<Moovers.DAL.Account> Accounts = Moovers.BL.Account.SearchAccount(SearchString);

            return PartialView("_AccountSearchResult", Accounts);        
        }
        catch (Exception ex)
        {
            throw;
        }

    }

问题是&#34; FormCollection&#34;,这是空的。可能的原因是什么?

2 个答案:

答案 0 :(得分:3)

这是因为您使用"GET"作为方法。

请参阅https://stackoverflow.com/a/2265210/120955

答案 1 :(得分:0)

为什么要使用FormCollection?您可以直接将SearchString作为操作参数吗?

public PartialViewResult SearchAccount(string SearchString)
{
  try
  {
     var Accounts = Moovers.BL.Account.SearchAccount(SearchString);
     return PartialView("_AccountSearchResult", Accounts);        
  }
  catch (Exception ex)
  {
     throw;
  }
}

如果从Form中传递多个值,则可以创建视图模型并简化生活。

实施例

public class SearchModel
{
   public string SearchString { get; set; }
   .. others
}

public PartialViewResult SearchAccount(SearchModel searchModel)
{
  ...
}

请注意,重要的是表单字段的名称应与参数/属性名称匹配。

相关问题