日期字段在分页MVC时丢失日期

时间:2017-06-15 15:59:10

标签: asp.net-mvc twitter-bootstrap

我有一个带有fromDate和toDate的MVC视图以及一个bootstrap datepicker。 日期字段最初显示为'2017年6月15日' 但是,当我进行搜索时,第1页显示正确但当我转到任何其他页面时,日期重置并显示为'2000年1月6日'。

任何帮助都将非常感激。 谢谢。

控制器:

using PagedList;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using WebApplication5.Models;


namespace WebApplication5.Controllers
{
    public class testController : Controller
    {
        private JobSubmissionEntities1 db = new JobSubmissionEntities1();

        public ViewResult Index(string currentFilter, string searchString, DateTime? fromDate, DateTime? toDate, int? page)
        {


            if (!fromDate.HasValue) fromDate = DateTime.Now.Date.AddDays(-1);
            if (!toDate.HasValue) toDate = DateTime.Now.AddDays(5);
            if (toDate < fromDate) toDate = DateTime.Now.AddDays(5);

            ViewBag.fromDate = fromDate;
            ViewBag.toDate = toDate;

            //IF searchString is Empty
            if (searchString != null)
            {
                page = 1;
            }
            else
            {
                searchString = currentFilter; fromDate = ViewBag.fromDate; toDate = ViewBag.toDate;
            }

            ViewBag.CurrentFilter = searchString;


            var JobDetails = from s in db.JobDetails
                             select s;

            //if searchString IS NOT empty
            if (!String.IsNullOrEmpty(searchString))
            {
                JobDetails = JobDetails.Where(s =>
                (s.JobNo.Equals(searchString) &&
                s.SubmissionDate >= fromDate && s.SubmissionDate < toDate));
            }
            else
            {
                JobDetails = JobDetails.Where(s => (
                s.SubmissionDate >= fromDate && s.SubmissionDate < toDate));
            }
            int pageSize = 10;
            int pageNumber = (page ?? 1);

            return View(JobDetails.OrderBy(i => i.JobNo).ToPagedList(pageNumber, pageSize));
        }

    }
}

查看:

@model PagedList.IPagedList<WebApplication5.Models.JobDetail>

@using PagedList.Mvc;
<link href="~/Content/PagedList.css" rel="stylesheet" type="text/css" />
@{
    Layout = "~/Views/Shared/_Layout_Wide.cshtml";
}

    ViewBag.Title = "Index";
}
@section DatePicker {

    <link href="~/Content/bootstrap.min.css" rel="stylesheet" />
    <link href="~/Content/bootstrap-datetimepicker.min.css" rel="stylesheet" />
    <script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script src="~/Scripts/moment-with-locales.min.js"></script>
    <script src="~/Scripts/bootstrap.min.js"></script>
    <script src="~/Scripts/bootstrap-datetimepicker.min.js"></script>
}

<h2>Index</h2>

@{

    var fromDate = (DateTime)ViewBag.fromDate;
    var toDate = (DateTime)ViewBag.toDate;
}


@using (Html.BeginForm("Index", "Test", FormMethod.Get))
{


    /***FromDate***/

    <div class="container">
        <div class="row">
            <div class='col-sm-3'>
                <div class="form-group">
                    <div class='input-group date' id='fromDate'>
                          <div>@Html.TextBox("fromDate", string.Format("{0:dd MMM yyy}", fromDate),  new { @class = "form-control", } )</div>
                           <span class="input-group-addon">
                            <span class="glyphicon glyphicon-calendar"></span>
                        </span>
                    </div>
                </div>
            </div>
        </div>
    </div>



    /***toDate***/

    <div class="container">
        <div class="row">
            <div class='col-sm-3'>
                <div class="form-group">
                    <div class='input-group date' id='toDate'>
                        <div>@Html.TextBox("toDate", string.Format("{0:dd MMM yyy}", toDate),  new { @class = "form-control", } )</div>
                           <span class="input-group-addon">
                            <span class="glyphicon glyphicon-calendar"></span>
                        </span>
                    </div>
                </div>
            </div>
        </div>
    </div>

    /***searchString***/

    <div class="container">
        <div class="row">
            <div class='col-sm-3'>
                <div class="form-group">
                    @Html.Editor("SearchString", ViewBag.CurrentFilter as string, new { htmlAttributes = new { @class = "form-control" } })
                </div>
            </div>
        </div>
    </div>

    /***Submit***/

    <div class="container">
        <div class="row">
            <div class='col-sm-3'>
                <div class="form-group">
                    <input type="submit" class="btn btn-success" value="Search" />
                </div>
            </div>
        </div>
    </div>

    <hr />
}


<table class="table-bordered">
    <tr style="background-color:black">
        <th>
            @Html.ActionLink("Job No", "Index", new { style = "color:white" })
        </th>
        <th>
            @Html.ActionLink("Submission Date", "Index", null, new { style = "color:white" })
        </th>
        <th>
            @Html.ActionLink("Job Title", "Index", null, new { style = "color:white" })
        </th>
        <th>
            @Html.ActionLink("Article", "Index", null, new { style = "color:white" })
        </th>
        <th>
            @Html.ActionLink("Status", "Index", null, new { style = "color:white" })
        </th>

        <th></th>
    </tr>




    @foreach (var item in Model)
            {

                //Highlight Rows Green, Yellow or Red Dependant on Status - Yellow means job has not finished processing
                string statusCheck = (item.Status);
                string style = "";
                if (statusCheck.Contains("Status message 0003:Job finished"))
                {
                    style = "background-color:#e6fff2";
                }
                else if (statusCheck.Equals("0"))
                {
                    style = "background-color:#ffffcc";
                }
                else
                {
                    style = "background-color:#ff8080";
                }





                <tr style="@style">


                    <td>
                        @Html.DisplayFor(modelItem => item.JobNo)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.SubmissionDate)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.JobDesc)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.Article)
                    </td>

                    <td>
                        @Html.DisplayFor(modelItem => item.Status)
                    </td>
                    <td>
                        @Html.ActionLink("Edit", "Edit", new { id = item.SubmissionID }) |
                        @Html.ActionLink("Details", "Details", new { id = item.SubmissionID }) |
                        @Html.ActionLink("Delete", "Delete", new { id = item.SubmissionID })
                    </td>
                </tr>
    }



</table>

<br />
        Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount

        @Html.PagedListPager(Model, page => Url.Action("Index", new { page, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter, fromDate = ViewBag.fromDate, toDate = toDate }))

        @section scripts{
            <script type="text/javascript">
                $(function () {
                    $('#fromDate').datetimepicker({
                      format: 'DD MMMM YYYY',
                    });
                });
            </script>
            <script type="text/javascript">
            $(function () {
                $('#toDate').datetimepicker({
                    format: 'DD MMMM YYYY'
                });
            });
            </script>
        }

1 个答案:

答案 0 :(得分:0)

@ Html.TextBox()可以从ModelState或ViewData中提取值。

因此您可以手动将日期值绑定到文本框

请参考此链接:https://stackoverflow.com/a/29369965/3397630以获得与您的问题类似的已接受解决方案。

希望它会有所帮助

感谢

KARTHIK