2014-02-01 3 views
0

Я был застрял от раздражающей проблемы в моем коде, но решил, но смутил меня. Я использую 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

Я предполагаю, что у вас есть атрибуты '[HttpGet]' и '[HttpPost]' в соответствующих местах ...? –

+0

Я не упоминал атрибуты явно, но когда я изменил метод FORM на GET, тогда он сработал, но теперь с сообщением, с сообщением о том, что он берет даты, выбранные, ВО ВРЕМЯ ПАРТИИ –

+0

Я думаю, причина в том, что в значениях POST отправляются после тела, поэтому в сначала он выполняет IF, потому что значения пустые, но в GET он получает значения в первой попытке, потому что отправляет в заголовке? правильно ? –

ответ

1

Причина, почему ваш код не работает очень просто. У вас есть html <form>, в котором вы разместили поля ввода начального и конечного дат. С другой стороны, сетка полностью разделена. Если вы используете POST, значения, введенные в эти текстовые поля, отправляются в тело запроса и не отображаются в текущем URL-адресе. Поэтому, когда WebGrid визуализирует, он не может генерировать правильные значения для ссылок на страницы. Причина этого в том, что когда он генерирует эти ссылки, он включает в себя все параметры строки запроса, которые являются частью текущего URL-адреса запроса.

С другой стороны, когда вы меняете форму для использования глагола GET, значения текстовых полей становятся частью текущего URL-адреса в качестве параметров строки запроса, а когда WebGrid отображает ссылки на страницы, они подбирают их. Это правильный способ осуществить это:

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

Если вы используете POST, то WebGrid не имеет абсолютно никакого способа узнать, что у вас есть какой-то другой HTML <form> в вашей странице и выбрать не можете выбрать значение.

+0

great sir, lemme суммировать то, что я понял из вашего сообщения, я думаю, причина в том, что в значениях POST отправляются после тела, поэтому на первом месте он выполняет IF, потому что значения пустые, но в GET он получает значения в первой попытке, потому что отправляет в заголовке? правильно ? –

+0

Ваше понимание почти правильно. Просто, когда вы делаете запросы GET, значения передаются как параметры строки запроса в URL-адресе (не в заголовках, как вы писали в своем комментарии). Значения отображаются в текущем URL-адресе после отправки формы. Просто взгляните на адресную строку вашего браузера. –

+0

ОК, так что это значит, что ПОЧТА СДЕЛАТЬ ничего, правильно? –

Смежные вопросы