我的代码中遇到了一个恼人的问题,但是我解决了这个问题。我正在使用DATE FROM
---- DATE TO
框来选择日期范围,以便在WEBGRID
中的日期范围之间显示员工,但问题是,在第一次显示时,它完全按照该日期显示范围但是当我进行分页时(点击第2,3,4页......)然后它选择了每个日期的所有员工记录,因为我设置了IF条件,如果DatFrom
和TO
为空然后选择我在IF
块中提到的所有结果。这一切都归功于FORMMETHOD.POST
,当我写FORMMETHOD.GET
然后它开始正常工作,为什么?
那么如何正确实现呢?
public ActionResult ShowCalTextBox(String DateFrom, String DateTo)
{
if (DateFrom != "" && DateTo == "")
{
IEnumerable<GetEmpRec_DateResult> EmpRec_DateFrom = DataContext.GetEmpRec_Date(DateFrom, null).ToList();
ViewBag.Dates = "Records for"+" "+ DateFrom ;
return View(EmpRec_DateFrom);
}
else if (DateFrom == "" && DateTo != "")
{
IEnumerable<GetEmpRec_DateResult> EmpRec_DateTo = DataContext.GetEmpRec_Date(null, DateTo).ToList();
ViewBag.Dates = "Records for" + " " + DateTo;
return View(EmpRec_DateTo);
}
else if (DateFrom != "" && DateTo != "")
{
IEnumerable<GetEmpRec_DateResult> EmpRec_ByDate = DataContext.GetEmpRec_Date(DateFrom, DateTo).ToList();
ViewBag.Dates = "Records from" + " " + DateFrom +" "+"to"+" "+DateTo;
return View(EmpRec_ByDate);
}
else if (DateFrom == "" && DateTo == "")
{
IEnumerable<GetEmpRec_DateResult> EmpRec_Default = DataContext.GetEmpRec_Date(null, null).ToList();
ViewBag.Dates = "No date selection";
return View(EmpRec_Default);
}
return View();
}
public ActionResult About()
{
return View();
}
查看:
@using EmployeeAttendance_app.Models
<div>
@using (Html.BeginForm("ShowCalTextBox", "Home", FormMethod.Post))
{
<label id="lblFrom">From</label>
<input type="text" id="TxtBoxFrom" name="DateFrom" />
<label id="lblTo">To</label>
<input type="text" id="TxtBoxTo" name="DateTo" />
<br />
<br />
<button type="submit" id="btnSubmitDate" name="btnSubmit">Submit</button>
}
</div>
<div>
<h4>@ViewBag.Dates</h4>
<br />
@{
var grid = new WebGrid(ViewData.Model, rowsPerPage: 20, canPage: false);
}
<div id="AllEmpGrid_ByDate">
@grid.GetHtml(columns: grid.Columns(
grid.Column("EmplID", "Employee ID"),
grid.Column("EmplName","Employee Name"),
grid.Column("ShiftID", "Shift ID"),
grid.Column("DateVisited", "Date of Visit"),
grid.Column("InTime", "In Time"),
grid.Column("TimeOut", "Time Out"),
grid.Column("OverTime", "Over Time"),
grid.Column("TotalWorkingTime", "Total Working Time")
))
</div>
</div>
答案 0 :(得分:1)
您的代码无法正常工作的原因非常简单。您有一个html <form>
,其中放置了开始日期和结束日期输入字段。另一方面,网格是完全分开的。如果您使用POST,则在这些文本框中输入的值将在请求正文中发送,并且在当前URL中不会显示。因此,当WebGrid呈现时,它无法为分页链接生成正确的值。这样做的原因是,当它生成这些链接时,它包含所有查询字符串参数,这些参数是当前请求URL的一部分。
另一方面,当您切换表单以使用GET动词时,文本框的值将成为当前URL的一部分作为查询字符串参数,并且当WebGrid呈现分页链接时,它会选择它们。这是实现这个目标的正确方法:
@using (Html.BeginForm("ShowCalTextBox", "Home", FormMethod.Get))
{
...
}
如果您使用POST,WebGrid绝对无法知道您的页面中有其他html <form>
,并且选择无法选择值。