javascript - 传递参数日期时间?在 mvc 和 jquery 中

标签 javascript c# jquery asp.net-mvc

我尝试使用 javasqcrip 和 jquery 将一些参数传递给 Controller ​​。

这是代码:

@using PagedList.Mvc;
@model PagedList.IPagedList<Universidad.Entidades.PER_PERSONAS>

@{

    Layout = "~/Views/Shared/_Layout.cshtml";

    var titulo = ViewBag.Title = "Lista de personas";

    var listaTipoPersona = (IEnumerable<SelectListItem>)ViewBag.ListaTipoPersona;
}

@section Head
{
    <script src="/Scripts/bootstrap.js" type="text/javascript"></script>
    <link href="/Content/bootstrap.css" type="text/css" rel="stylesheet" />
    <script src="~/Scripts/bootstrap-datepicker.js" type="text/javascript"></script>
    <link href="~/Content/bootstrap-datepicker.css" type="text/css" rel="stylesheet" />
    <script src="~/Scripts/bootstrap-select.js" type="text/javascript"></script>
    <link href="~/Content/bootstrap-select.css" type="text/css" rel="stylesheet" />
    <script src="~/Scripts/bootstrap-multiselect.js" type="text/javascript"></script>
    <link href="~/Content/bootstrap-multiselect.css" type="text/css" rel="stylesheet" />
}

@section Scripts
{
    <script type="text/javascript">
        $(document).ready(function () {
            $('.datepicker').datepicker({
                language: 'es',
                format: 'dd/mm/yyyy',
                autoclose: true
            });

            $('.selectpicker').selectpicker({
                style: 'btn-default btn-sm'
            });
        });


        $(document).ready(function () {
            $("#ddlTipoPersona").change(function () {
                debugger;
                FiltraPersonas();
            });
        });

        function FiltraPersonas() {

            var idTipoPersona = $("#ddlTipoPersona").val();
            var fechaInicio = $("#txtFechaIngresoDe").val();
            var fechaFin = $("#txtFechaIngresoHasta").val();
            var idPersona = $("#txtIdLinkPersona").val();

            var path = '@Url.Action("EnlistarPersonas", "Personas")' + '?idTipoPersona=' + idTipoPersona + '&idPersona=' + idPersona + '&fechaInicio=' + fechaInicio + '&fechaFin=' + fechaFin + '&page=1';
            window.location.href(path);
        }
    </script>
}
<br />
<h3>@titulo</h3>
<br />
<div class="form-group row form-group input-group-sm" style="margin: 5px; padding: 10px;">
    <div class="row">
        <div class="row" style="margin: 0 0 0 0; padding: 0 0 0 0;">
            <div class="form-group col-lg-offset-3 col-md-6">
                <div class="input-group input-group-sm">
                    @Html.Label("Fecha Ingreso de", new { @class = "input-group-addon" })
                    @Html.TextBox("txtFechaIngresoDe", null, new { @class = "form-control datepicker" })
                    @Html.Label("Hasta", new { @class = "input-group-addon" })
                    @Html.TextBox("txtFechaIngresoHasta", null, new { @class = "form-control datepicker" })
                </div>
            </div>
        </div>
    </div>
    <div class="row">
        <div class="row" style="margin: 0 0 0 0; padding: 0 0 0 0;">
            <div class="form-group input-group-sm form-group-sm">
                <div class="col-lg-offset-2 col-md-4">
                    <div class="input-group">
                        @Html.Label("No de Persona", new { @class = "input-group-addon" })
                        @Html.TextBox("txtIdLinkPersona", null, new { @class = "form-control" })
                    </div>
                </div>
                <div class="col-md-4">
                    <div class="input-group">
                        @Html.Label("Tipo de Persona", new { @class = "input-group-addon" })
                        @Html.DropDownList("ddlTipoPersona", listaTipoPersona, new { @class = "selectpicker", data_live_search = true })
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<br />
<div>
    <table class="table">
        <tr>
            <th>
                Id
                @*@Html.ActionLink("Last Name", "Index", new { sortOrder = ViewBag.NameSortParm, currentFilter = ViewBag.CurrentFilter })*@
            </th>
            <th>
                Nombre
            </th>
            <th>
                Apellido Paterno
                @*@Html.ActionLink("Enrollment Date", "Index", new { sortOrder = ViewBag.DateSortParm, currentFilter = ViewBag.CurrentFilter })*@
            </th>
            <th>
                Apellido Materno
            </th>
            <th>
                Fecha de ingreso
            </th>
        </tr>

        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.ID_PER_LINKID)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.NOMBRE)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.A_PATERNO)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.A_MATERNO)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.FECHAINGRESO)
                </td>
            </tr>
        }
    </table>

    <br />
    Pagina @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) De @Model.PageCount

    @Html.PagedListPager(Model, page => Url.Action("EnlistarPersonas", new { page, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter }))
</div>

Controller 是

    [SessionExpireFilter]
    public async Task<ActionResult> EnlistarPersonas(int? page, DateTime? fechaInicio, DateTime? fechaFin, int? idTipoPersona, string idPersona)
    {
        Sesion();

        var sesion = (Sesion)Session["Sesion"];
        var servicioPersonas = new SvcPersonas(sesion);

        List<PER_PERSONAS> listaPersonas;

        if (fechaInicio == null && fechaFin == null && idPersona == null && idTipoPersona == null)
        {
            listaPersonas = await servicioPersonas.ObtenListaPersonas();
        }
        else
        {
            listaPersonas = await servicioPersonas.ObtenListaPersonasFiltro(idPersona, fechaInicio, fechaFin, idTipoPersona);
        }

        var listaTipoPersona = await servicioPersonas.ObtenCatTipoPersona();

        var enlistarTipoPersona = listaTipoPersona.Select(c => new SelectListItem
        {
            Value = c.ID_TIPO_PERSONA.ToString(CultureInfo.InvariantCulture),
            Text = c.TIPO_PERSONA
        }).ToArray();

        ViewBag.ListaTipoPersona = enlistarTipoPersona;

        const int pageSize = 7;
        var pageNumber = (page ?? 1);

        return View(listaPersonas.ToPagedList(pageNumber, pageSize));
    }

在请求中填写所有字段和javascrip发送,在 Controller 中变量fechaInicio很好地响应了参数,但由于某种原因fechaFin总是在 Controller 操作中响应null。

为什么会出现这个问题?

最佳答案

在 MVC 上处理日期有很多技巧,如您所见 herehere .

由于您没有使用模型,我建议您以字符串形式接收日期,并将 Controller 更改为:

using System.Globalization;
...

public async Task<ActionResult> EnlistarPersonas(int? page, string fechaInicio, string fechaFin, int? idTipoPersona, string idPersona)
{
    DateTime? fInicio = null;
    if (!string.IsNullOrEmpty(fechaInicio))
    {
        DateTime.TryParseExact(fechaInicio, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out fInicio))
    }

    DateTime? fFin = null;
    if (!string.IsNullOrEmpty(fechaFin))
    {
        DateTime.TryParseExact(fechaFin, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out fFin))
    }

    ... The rest of your controller
}

此外,您还需要对 URL 上的栏进行编码:

var path = '@Url.Action("EnlistarPersonas", "Personas")' + '?idTipoPersona=' + idTipoPersona + '&idPersona=' + idPersona + '&fechaInicio=' + encodeURIComponent(fechaInicio) + '&fechaFin=' + encodeURIComponent(fechaFin) + '&page=1';

关于javascript - 传递参数日期时间?在 mvc 和 jquery 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32571342/

相关文章:

javascript - 如何根据 HTML 中的用户输入在表中添加新行

c# - 在 C# 中的视频上绘制矩形

c# - WPF AvalonEdit SQL xhsd 请求

javascript - jQuery 复选框并选择 - 对值求和并添加到 var

javascript - 检查选定的图像尺寸并在超出范围时发出警报

javascript - 如何在 threejs 中移动 gltf 模型?

C# 正则表达式和 html,以第一个 "结尾

jquery - 如何将对象添加到 jQuery 对象以便我稍后可以检索它?

javascript - Backbone save() 方法 Post 而不是 Put

javascript - d3.js 以 HTML 为节点的二叉树