我试图在html表单中创建分页。
如何让每个页面按钮更改模型的CurrentPage
属性?
我是MVC的新手,请耐心等待
我有一个报告列表,我需要在名为Search
的视图中显示。我为其创建了一个模型(ReportViewModel
),另一个模型包含了一个名为SearchViewModel
的列表。在SearchViewModel
我还有一些其他变量,例如SearchName
,SearchDate
,CurrentPage
,PageCount
,PageSize
等。目标是进行分页并在Search
中搜索名为ReportsController
的一个操作。
现在,我想通过仅将SearchViewModel
实例作为参数给予该函数来保持该操作简单,以便在内部使用该模型的所有变量。这样做,我不必两次输入参数名称(一次在SearchViewModel
中,一次作为Search
动作中的参数)。我不需要在其他地方使用该搜索功能,因此除了SearchViewModel
实例之外没有任何参数可以。
所以,非常宽松,它看起来像这样:
ReportsController.cs
public class ReportsController : Controller
{
public ActionResult Search(SearchViewModel model)
{
if (!ModelState.IsValid)
return View(model);
// do search magic here
return View(model)
}
}
Search.cshtml
@model ISFinReports.Models.SearchViewModel
@{
ViewBag.Title = "List";
Layout = "~/Views/_masterLayout.cshtml";
}
<link href="~/CSS/Search.css" rel="stylesheet" />
<script src="~/Scripts/Search.js"></script>
@using (Html.BeginForm("Search", "Reports", FormMethod.Get))
{
<div id="divSearchBar">
// add @Html.DropDownListFor, @Html.TextBoxFor and submit button here
</div>
<div id="divReportsTable">
<table id="tblReports">
@if (Model.Reports != null)
{
foreach (var r in Model.Reports)
{
// add tr, td of all reports in report list
}
}
</table>
</div>
<div style="text-align:center">
@for (int i = 0; i < Model.PageCount; i++)
{
@Html.ActionLink(i.ToString(), "Search", "Reports", new { CurrentPage = i });
// or
// <input type="submit" value="@i" onClick="meybe something like this?" />
}
Current Page @Html.EditorFor(q => q.CurrentPage), of total @Model.PageCount pages
</div>
}
我知道我可以简单地输入两次我需要在控制器和视图之间流动的所有数据,一次在模型中,一次在Search
动作参数,但这可以解释为什么我是什么?尽力不去做。目前我有一个textbox
用于编辑当前页面,它可以正常工作,因为它是通过@ Html.EditorFor创建的,但我希望每个页面都有多个按钮。
我可以在该表单中创建一个hidden
字段,并创建一个javascript函数,按ID找到hidden
字段,并更改它{{1}然后调用提交按钮value
函数的任何内容。 但是,是否有更好/更短/更多MVC的方式来实现它?