Asp.net mvc 3 视图中的参数无法到达控制器操作方法
我正在我的一个视图(ASP.NET MVC 3 Razor)中实现Troy Goode的页面列表。我面临的挑战是,当我单击页码链接时,请求被路由到我的HttpGet方法,该方法只返回空页面(准备输入) 我的视图模型: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
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 = "")
{
//.....
}