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



我有一个MVC视图,带有fromDate和toDate以及引导日期选择器。日期字段的显示方式类似于"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>
        }

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

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

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

希望会有所帮助

谢谢

卡尔西克

最新更新