Razor 未将数据绑定到模型的帮助程序的Html.textbox

Razor 未将数据绑定到模型的帮助程序的Html.textbox,razor,asp.net-core-mvc,html-helper,asp.net-core-tag-helpers,Razor,Asp.net Core Mvc,Html Helper,Asp.net Core Tag Helpers,这是一个奇怪的情况,我还没有弄清楚,并一直阻止我使用标签助手 我有一个带有很多下拉列表和选项的搜索表单。其中一些我尝试使用标记帮助程序而不是HTML帮助程序,因为它的语法更具可读性。我意识到,标记帮助程序无法正确绑定到模型,因此当调用控制器操作时,不会传递值。然而,有时HTML助手也会无缘无故地停止工作 这就是我现在的情况: 我有这样一个搜索模型类: public class Search : ISearch { public string Query { get; set; }

这是一个奇怪的情况,我还没有弄清楚,并一直阻止我使用标签助手

我有一个带有很多下拉列表和选项的搜索表单。其中一些我尝试使用标记帮助程序而不是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; }

}
公共类搜索:ISearch
{
公共字符串查询{get;set;}
公共整型页{get;set;}
public int SelectedDecision{get;set;}
public int SelectedSeccion{get;set;}
public int SelectedAccion{get;set;}
public int SelectedCampo{get;set;}
[显示(Name=“Desde:”)]
[数据类型(DataType.Date)]
公共日期时间?日期范围开始{get;set;}
[显示(Name=“Hasta:”)]
[数据类型(DataType.Date)]
公共日期时间?DateRangeEnd{get;set;}
公共字符串Ponente{get;set;}
公共字符串Demandante{get;set;}
//高级搜索界面控件的特性
公共列表决策{get;set;}
公共列表密码{get;set;}
公开名单
@*周期*@
塞拉
@LabelFor(m=>m.DateRangeStart)
@Html.TextBoxFor(m=>m.DateRangeStart,“{0:dd/MM/yyyy}”,new{@id=“drs”})
@LabelFor(m=>m.DateRangeEnd)
@Html.TextBoxFor(m=>m.DateRangeEnd,“{0:dd/MM/yyyyy}”,new{@id=“dre”})
@**@
接受器
@*接受器*@
正如您所看到的,我已经尝试使用taghelpers和htmlhelpers。现在,只有DateRangeStart属性传递给控制器方法。DateRangeEnd一直作为null传递

我在代码中做了一些更改,但没有对那个特定的部分进行更改,因为它工作得很好,并且在生产中也工作得很好

所以,首先我想知道DateRangeEnd HTML helper中可能出现的错误。还有,为什么有时候标记帮助程序不绑定,但htmlhelpers绑定

更新

我只是将html帮助程序的DateRange文本框更改为taghelpers,并且我有相同的行为。只传递DateRangeStart值,DateRangeEnd设置为null

更新2

我去了另一个工作站,检查它是否正常工作,它正常工作。我复制了我以前做的所有更改,没有一个涉及到该特定属性的代码行。它正常工作

然后我回到家里的工作站,更新并同步所有提交。在这台机器上,问题再次出现。
只有在chrome或Edge上调试时,属性id才不会在此同步。

如果您使用标记帮助程序,请不要手动设置id。Asp For为您执行此操作。因此,如果您更改id/名称,则它将不匹配,导致不匹配,从而导致结束日期为空值。HtmlHelpers也是如此。为什么只有daterangeend失败。此外,如果我想更改该自定义id,我应该在这些字段上的一些Javascript例程中使用哪个id?为了确切地告诉您为什么会发生这种情况,我需要看看您是如何构造搜索方法及其参数的。@mvermef我确实用标记帮助器更改了html帮助器,并设置了Ijavascrit工作正常。但是,正如我的更新2中所述,在这台机器中,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>