Asp.net mvc 3 视图中的参数无法到达控制器操作方法

Asp.net mvc 3 视图中的参数无法到达控制器操作方法,asp.net-mvc-3,pagedlist,Asp.net Mvc 3,Pagedlist,我正在我的一个视图(ASP.NET MVC 3 Razor)中实现Troy Goode的页面列表。我面临的挑战是,当我单击页码链接时,请求被路由到我的HttpGet方法,该方法只返回空页面(准备输入) 我的视图模型: public class SearchViewModel { public SelectList IndustrySelectList { get; set; } public IPagedList<KeyValuePair<string, Search

我正在我的一个视图(ASP.NET MVC 3 Razor)中实现Troy Goode的页面列表。我面临的挑战是,当我单击页码链接时,请求被路由到我的HttpGet方法,该方法只返回空页面(准备输入)

我的视图模型:

public class SearchViewModel
{
    public SelectList IndustrySelectList { get; set; }
    public IPagedList<KeyValuePair<string, SearchResult>> SearchResults { get; set; }
    public PagingInfo PagingInfo { get; set; }
}

在此方面的任何帮助都将不胜感激

通过单击按钮,您将提交表单,这就是它执行
httppost
的原因。下一页链接正确地命中了httpget,但您没有将任何信息传递给它,以便它知道要获取什么。get需要其他信息,如您想要的页面。

页码链接会触发一个
get
请求,因此您需要确保您的
get
操作也可以处理完整搜索,因此需要获取页码和行业数组-在这些参数不可用时使用默认值

e、 g

您需要像这样修改寻呼机链接,以将行业传递给get操作

@Html.PagedListPager((IPagedList)Model.SearchResults,page=>Url.Action(“搜索”,“主页”,新建{page,industries=string.Join(“,”,Model.IndustrySelectList.Where(x=>x.Selected)。选择(x=>x.Text))


从您的代码中,我不清楚post操作从何处获取
string[]industries
,或者它是如何处理的,但是您需要某种方式将此信息传递给get操作,可能是作为逗号分隔的单个字符串。我提供的示例假设您是从viewmodel上的选择列表中选择的

谢谢您的回复!我已经更改了GET操作来处理完整搜索。但现在,当我点击一个页面链接时,比如第2页,GET操作会被调用2次。或者如果我点击第4页的链接4次。这听起来有点奇怪-点击链接应该只请求一次操作。也许你的get行动正在召唤自己。仔细检查代码,看看是否是这样。
    [HttpGet]
    public ViewResult Search(string searchTerm = "")
    {
        SearchViewModel vm = new SearchViewModel
        {
            IndustrySelectList = new SelectList(_Industries.AsEnumerable(), "IndustryId", "IndustryName"),
            PagingInfo = new PagingInfo
            {
                CurrentPage = 1,
                ItemsPerPage = 25,
                TotalItems = 0
            }
        };

        return View(vm);
    }

    [HttpPost]
    public ActionResult Search(string[] industries, string searchTerm = "", int page = 1)
    {
        SearchViewModel vm = null;

        _url = "http://localhost/MasterNode/masternode.cgi?zoom_query={" + searchTerm + "}&zoom_xml=1&zoom_page={startPage?}&zoom_per_page=1000";
        StringBuilder sb = new StringBuilder();
        int pageSize = 5;

        if (string.IsNullOrEmpty(searchTerm))
        {
            vm = new SearchViewModel
            {
                IndustrySelectList = new SelectList(_Industries.AsEnumerable(), "IndustryId", "IndustryName")
            };
        }
        else
        {
            _request = new SearchRequest(SearchRequest.EnvironmentTypes.Development, "", _url, searchTerm, SearchRequest.SearchType.AllWords, 1000);
            sb.Append(GetResults(_url));
            _results = new Dictionary<string, SearchResult>();
            ParseResults(sb);
            GetDetailInformationForResults(searchTerm);

            vm = new SearchViewModel
            {
                IndustrySelectList = new SelectList(_Industries.AsEnumerable(), "IndustryId", "IndustryName"),
                SearchResults = _results.ToList<KeyValuePair<string, SearchResult>>().ToPagedList(1, 25),
                PagingInfo = new PagingInfo
                {
                    CurrentPage = page,
                    ItemsPerPage = pageSize,
                    TotalItems = _results.Count()
                }
            };
        }
        return View(vm);
    }
@model MultiView.OmniGuide.ViewModels.SearchViewModel
@using MultiView.OmniGuide.HtmlHelpers
@using PagedList
@using PagedList.Mvc
@{
    ViewBag.Title = "Search";
}
<link href="/Content/PagedList.css" rel="stylesheet" type="text/css" />

@using (Html.BeginForm("Search", "Home")) 
{
    @Html.HiddenFor(c => c.IndustrySelectList)
    @Html.HiddenFor(c => c.PagingInfo)
    @Html.HiddenFor(c => c.SearchResults)
    <table width="70%">
        <tr>
            <td colspan="2" style="background: #fff">
                <input id="searchTerm" name="searchTerm" type="text" class="SearchBox" style="width: 450px" />
                <input type="submit" class="SearchButton" value=" " />
            </td>
        </tr>
        <tr align="left">
            <td align="left" style="background: #fff">
                @Html.ActionLink("MultiView corporate site", "Search")
            </td>
        </tr>
        <tr>
            <td colspan="1" align="center" style="width: 450px">
                @{
                    Html.Telerik().PanelBar()
                        .Name("searchPanel")
                        .Items(title =>
                        {
                            title.Add()
                                .Text("Filter by Industry")
                                .Content(() =>
                                {
                                    @Html.RenderPartial("_Industry", @Model);
                                });
                        })
                        .Render();       
                }
            </td>
        </tr>
        <tr><td colspan="2"></td></tr>
    </table>
    <br />
    if (Model.SearchResults != null)
    {
        <table width="70%">
            <tr>
                <th>
                    Company Image
                </th>
                <th class="tableHeader">
                    Company Name Here
                </th>
                <th class="tableHeader">
                    Website
                </th>
            </tr>     
        @foreach (KeyValuePair<string, MultiView.OmniGuide.Models.SearchResult> itm in Model.SearchResults)
        { 
            <tr>
                <td align="left" style="width: 15%">
                    @itm.Value.DetailedInfo.LogoURL 
                </td>
                <td align="left" style="width: 60%">
                    <p style="text-align: left">
                     @itm.Value.DetailedInfo.DescriptionAbbreviated
                     <br />
                     </p>
                    @Html.AnchorLink(itm.Value.FoundURL, itm.Value.FoundURL)
                </td>
                <td style="width: 25%">
                    @itm.Value.FoundURL
                </td>
            </tr>
        }
        </table>    
        @Html.PagedListPager((IPagedList)Model.SearchResults, page => Url.Action("Search", "Home", new { page }))
    }
}
?HttpContext.Request.Form.AllKeys  
{string[5]}
    [0]: "IndustrySelectList"
    [1]: "PagingInfo"
    [2]: "SearchResults"
    [3]: "searchTerm"
    [4]: "industries"
[HttpGet]
public ViewResult Search(string searchTerm = "", int page = 1, 
     string industries = "")
{
    //.....
}