代码之家  ›  专栏  ›  技术社区  ›  SkyeBoniwell

从cshtml页面向控制器发送日期值

  •  0
  • SkyeBoniwell  · 技术社区  · 7 年前

    我正在使用.NetCore和实体框架来设计一个站点。

    在该站点上,我有一个cshtml页面,显示如下数据表:

    @foreach (var item in Model) {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.CharacterId)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.CharacterDisplayName)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.TimePathYear)
                </td>
    
                <td>
                    <a asp-action="Edit" asp-route-id="@item.CharacterId">Edit</a> |
                </td>
            </tr>
    }
    

    public async Task<IActionResult> Edit(int? id) { }
    

    但是,我现在希望传入一个用户可选择的日期范围,以便控制器如下所示:

    public async Task<IActionResult> Edit(int? id, DateTime? start, DateTime? end) { }
    

    因此,我将这两个日期控件添加到cshtml页面:

        <div class="datePickers">
            <div class="startDate">
                Start Date
                <input id="inputStartDate" type="date" asp-format="{0:yyyy-MM-dd}"/>
            </div>
            <div class="endDate">
                End Date
                <input id="inputEndDate" type="date" asp-format="{0:yyyy-MM-dd}"/>
                <button formaction="/Characters/Index/">Go</button>
            </div>
        </div>
    

    但是如何将他们选择的日期值添加到asp操作中?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Nan Yu    7 年前

    不确定您将startDate和startDate放在哪里,我假设您将两个日期选择输入放在表的顶部:

        <div class="datePickers">
        <div class="startDate">
            Start Date
            <input id="inputStartDate" type="date" asp-format="{0:yyyy-MM-dd}"/>
        </div>
        <div class="endDate">
            End Date
            <input id="inputEndDate" type="date" asp-format="{0:yyyy-MM-dd}"/>
            <button formaction="/Characters/Index/">Go</button>
        </div>
    </div>
    
    
    @foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.CharacterId)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.CharacterDisplayName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.TimePathYear)
            </td>
    
            <td>
                <a asp-action="Edit" asp-route-id="@item.CharacterId">Edit</a> |
            </td>
        </tr>
    }
    

    然后,您可以使用Jquery通过以下方式动态追加查询字符串:

    @section Scripts{
    
    <script>
    
        $(function () {
            $('#inputStartDate').on('change', function () {
                var querystring = 'inputStartDate=' + $("#inputStartDate").val() + '&inputEndDate=' + $("#inputEndDate").val();
                $("a").each(function () {
    
                    var href = $(this).attr('href').split('?')[0];
    
                    if (href) {
                        href += (href.match(/\?/) ? '&' : '?') + querystring;
                        $(this).attr('href', href);
    
                    }
                });
            });
        })
    

    public async Task<IActionResult> Edit(int? id, DateTime? inputStartDate, DateTime? inputEndDate)
    {
    
    }