这是一个奇怪的案例,我还没有弄清楚,这使我无法永远使用标签助手。
我有一个带有很多下拉列表和选项的搜索表单。我尝试使用标签帮助程序而不是HTML帮助程序来完成其中的一些操作,因为它的语法更具可读性。而且我意识到,标记帮助程序无法正确绑定到模型,因此,在调用控制器操作时,不会传递值。但是,有时HTML帮助程序也会在没有明显原因的情况下停止工作。
这是我现在的情况:
我有一个像这样的搜索模型类:
public class Search : ISearch
{
public string Query { get; set; }
public int Page { get; set; }
public int SelectedDecision { get; set; }
public int SelectedSeccion { get; set; }
public int SelectedAccion { get; set; }
public int SelectedCampo { get; set; }
[Display(Name="Desde: ")]
[DataType(DataType.Date)]
public DateTime? DateRangeStart { get; set; }
[Display(Name = "Hasta: ")]
[DataType(DataType.Date)]
public DateTime? DateRangeEnd { get; set; }
public string Ponente { get; set; }
public string Demandante { get; set; }
//prperties for advanced search interface controls
public List<Decision> Decisiones { get; set; }
public List<Seccion> Secciones { get; set; }
public List<Accion> Acciones { get; set; }
public List<Campo> Campos { get; set; }
}
视图是这样的:我认为您应该知道DateRangestart和DateRangeEnd属性引起的问题。
@model AbAWeb.Models.Search
<form class="container" asp-action="Search" id="searchForm">
<div class="row">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="input-group col-lg-12">
<input asp-for="Query" class="form-control" style="border-right: 0px;" placeholder="Busca en las relatorías" />
<span class="input-group-btn">
<button class="btn btn-search-box" type="submit">
<span class="fas fa-search"></span>
</button>
</span>
</div>
<div class="input-group col-lg-12">
<div class="row">
<div class="col-lg-12">
<select asp-for="SelectedDecision" class="selectpicker" data-style="dropdown-select" data-width="fit"
asp-items="@(new SelectList(Model.Decisiones, "DecisionId", "DecisionName"))"></select>
<select asp-for="SelectedSeccion" class="selectpicker" data-style="dropdown-select" data-width="fit"
asp-items="@(new SelectList(Model.Secciones, "SeccionId", "SeccionName"))"></select>
<select asp-for="SelectedAccion" class="selectpicker" data-style="dropdown-select" data-width="fit"
asp-items="@(new SelectList(Model.Acciones, "AccionId", "AccionName"))"></select>
<select asp-for="SelectedCampo" class="selectpicker" data-style="dropdown-select" data-width="fit"
asp-items="@(new SelectList(Model.Campos, "CampoId", "CampoName"))"></select>
<div class="btn-group">
<button class="btn btn-dates" role="button" type="button" id="dateRange" data-toggle="modal" data-target="#exampleModal">
//HERE IT IS THE BUTTON LABEL
</button>
</div>
<div class="btn-group">
<button class="btn btn-dates" type="button" onclick="toggleAdvancedOptions();">Opciones avanzadas</button>
</div>
</div>
</div>
<!--ADVANCED OPTIONS-->
<div id="advancedOptionsPanel" class="col-12 offset-top" style="display:none;">
<div class="card" style="width:100%;">
<div class="card-header">
<h4 class="card-title">Opciones avanzadas</h4>
<h5 class="card-subtitle mb-2 text-muted">Escoja diferentes opciones para refinar su búsqueda.</h5>
</div>
<div class="card-body">
<div class="col">
<div class="form-group">
<label>Magistrado Ponente</label>
<input asp-for="Ponente" class="form-control" placeholder="escriba el nombre o parte del nombre del magistrado ponente" />
@*@Html.TextBoxFor(m=>m.Ponente, new { @class = "form-control", @placeholder = "escriba el nombre o parte del nombre del magistrado ponente" })*@
@*<small id="ponenteHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>*@
</div>
<div class="form-group">
<label>Demandante</label>
<input asp-for="Demandante" class="form-control" placeholder="escriba el nombre o parte del nombre del demandante" />
@*@Html.TextBoxFor(m=>m.Ponente, new { @class = "form-control", @placeholder = "escriba el nombre o parte del nombre del magistrado ponente" })*@
@*<small id="ponenteHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>*@
</div>
</div>
</div>
<div class="card-footer">
<a href="#" class="card-link" onclick="toggleAdvancedOptions();">Aceptar</a>
</div>
</div>
</div>
<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
@*<h5 class="modal-title" id="exampleModalLabel">Periodo</h5>*@
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">Cerrar</span>
</button>
</div>
<div class="modal-body">
<div class="container">
<div class="row offset-top">
<div class="col-4">
@Html.LabelFor(m => m.DateRangeStart)
</div>
<div class="col">
@Html.TextBoxFor(m => m.DateRangeStart, "{0:dd/MM/yyyy}", new { @id = "drs" })
</div>
</div>
<div class="row offset-top">
<div class="col-4">
@Html.LabelFor(m => m.DateRangeEnd)
</div>
<div class="col">
@Html.TextBoxFor(m => m.DateRangeEnd, "{0:dd/MM/yyyy}", new { @id = "dre" })
@*<input asp-for="DateRangeEnd" asp-format="{0:dd/MM/yyyy}" type="text" id="dre" />*@
</div>
</div>
<div class="row offset-top">
<div class="col offset-4">
<a href="#" onclick="clearDates();">Toda la historia</a>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Aceptar</button>
@*<button type="button" class="btn btn-primary">Aceptar</button>*@
</div>
</div>
</div>
</div>
<div class="col-md-offset-2 col-md-10">
<span asp-validation-for="Query" class="text-danger"></span>
</div>
<input type="hidden" asp-for="Page" id="pageIndex" />
</div>
</div>
</form>
如您所见,我已经尝试使用taghelpers和htmlhelpers。现在,只有DateRangeStart属性传递给控制器Method。 DateRangeEnd继续传递为null。
我已经对代码进行了一些更改,但未对特定部分进行更改,因为它可以正常工作并且在生产中也可以正常工作。
因此,首先,我想知道DateRangeEnd HTML帮助器中可能出了什么问题。另外,为什么有时taghelpers不绑定而htmlhelpers绑定。
更新
我只是将HTML帮助程序的两个DateRange文本框都更改为taghelpers,并且我有相同的行为。仅传递DateRangeStart值,DateRangeEnd设置为null。
更新2
我去了另一个工作站,检查它是否正常工作。我复制了之前所做的所有更改,但都没有涉及到该特定属性的代码行。一切正常。
然后我回到自己的家庭工作站,更新并同步所有提交。并且在该机器中,问题再次出现。 在属性ID不同步的情况下,在Chrome或Edge上进行调试时,发生的情况相同。