HTML.TextBoxFor助手不将数据绑定到模型

时间:2018-07-26 20:38:19

标签: razor asp.net-core-mvc html-helper asp.net-core-tag-helpers

这是一个奇怪的案例,我还没有弄清楚,这使我无法永远使用标签助手。

我有一个带有很多下拉列表和选项的搜索表单。我尝试使用标签帮助程序而不是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上进行调试时,发生的情况相同。

0 个答案:

没有答案