Отправить значения даты в контроллер со страницы cshtml - PullRequest
0 голосов
/ 06 февраля 2019

Я использую .NetCore и Entity Framework для разработки сайта.

На сайте у меня есть страница 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-action?

Спасибо!

1 Ответ

0 голосов
/ 07 февраля 2019

Не уверен, куда вы положили 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)
{

}
...