我尝试用javasqcrip和jquery传递一些参数给控制器。
这是代码:
@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>
,控制器为
[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));
}
在请求y填充所有字段和javascript发送,在控制器中变量fechaInicio返回好参数,但由于某些原因,在控制器动作中,fechaInicio总是返回null。
为什么有问题?
在MVC中有很多处理日期的技巧,你可以在这里和这里看到。
由于您不使用模型,我建议您接收日期作为字符串,将控制器更改为:
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';