开始工作,但发布不工作

时间:2014-02-01 10:25:30

标签: c# asp.net-mvc forms get

我的代码中遇到了一个恼人的问题,但是我解决了这个问题。我正在使用DATE FROM ---- DATE TO框来选择日期范围,以便在WEBGRID中的日期范围之间显示员工,但问题是,在第一次显示时,它完全按照该日期显示范围但是当我进行分页时(点击第2,3,4页......)然后它选择了每个日期的所有员工记录,因为我设置了IF条件,如果DatFromTO为空然后选择我在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>

1 个答案:

答案 0 :(得分:1)

您的代码无法正常工作的原因非常简单。您有一个html <form>,其中放置了开始日期和结束日期输入字段。另一方面,网格是完全分开的。如果您使用POST,则在这些文本框中输入的值将在请求正文中发送,并且在当前URL中不会显示。因此,当WebGrid呈现时,它无法为分页链接生成正确的值。这样做的原因是,当它生成这些链接时,它包含所有查询字符串参数,这些参数是当前请求URL的一部分。

另一方面,当您切换表单以使用GET动词时,文本框的值将成为当前URL的一部分作为查询字符串参数,并且当WebGrid呈现分页链接时,它会选择它们。这是实现这个目标的正确方法:

@using (Html.BeginForm("ShowCalTextBox", "Home", FormMethod.Get))
{
    ...
}

如果您使用POST,WebGrid绝对无法知道您的页面中有其他html <form>,并且选择无法选择值。