2

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

@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;
        }

    }

问题是“FormCollection”,它是空的。可能的原因是什么?

4

2 回答 2

3

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

https://stackoverflow.com/a/2265210/120955

于 2012-07-17T20:11:49.047 回答
0

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

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)
{
  ...
}

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

于 2012-07-18T02:56:34.563 回答