【问题标题】:Send date values to controller from cshtml page从 cshtml 页面向控制器发送日期值
【发布时间】:2019-02-06 17:26:49
【问题描述】:

我正在使用 .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 中?

谢谢!

【问题讨论】:

    标签: razor entity-framework-6 asp.net-core-2.0


    【解决方案1】:

    不确定您将 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)
    {
    
    }
    

    【讨论】:

      猜你喜欢
      • 2018-04-01
      • 2016-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多