【问题标题】:I am Not able to bind Range picker Value with asp Net Core Model我无法将范围选择器值与 asp Net Core 模型绑定
【发布时间】:2020-12-18 15:58:41
【问题描述】:

我在我的 Asp Net Core Project 中使用了引导日期范围选择器。 我想用我的模型绑定价值,但我做不到。

这是我的代码:

<div class="form-group">
<label asp-for="date">Start Date*</label>
<input type="text" asp-for="date" name="datefilter"  />
<div class="invalid-feedback">
Please Select Start Date.
</div>
</div>
</div>

这是我的日期范围选择器的 jQuery 代码:

$(function () {

            $('input[name="datefilter"]').daterangepicker({
                autoUpdateInput: false,
                locale: {
                    cancelLabel: 'Clear'
                }
            });

            $('input[name="datefilter"]').on('apply.daterangepicker', function (ev, picker) {
                $(this).val(picker.startDate.format('MM/DD/YYYY') + ' - ' + picker.endDate.format('MM/DD/YYYY'));
            });

            $('input[name="datefilter"]').on('cancel.daterangepicker', function (ev, picker) {
                $(this).val('');
            });
        });

这是我要绑定此日期范围选择器值的我的模型:

public string date { get; set; }

【问题讨论】:

  • 嗨@Coder,我的回答对您解决问题有帮助吗?
  • @Rena 不,我不想使用 AJAX 执行此操作,我希望在发布数据时单击提交按钮时执行此操作。
  • 嗨@Coder,请检查我更新的答案。
  • @Rena 如果我想这样做,日期变量的类型应该是什么?
  • 它应该是你所做的那样的字符串。

标签: jquery twitter-bootstrap asp.net-core razor-pages


【解决方案1】:

无法获取字符串值的原因是输入名称datefilter与模型属性名称不匹配。

你需要先阅读模型绑定系统是如何工作的:

https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-3.1#complex-types

这是一个你可以参考的工作演示:

型号:

public class TestModel
{
    public string date { get; set; }
}

查看:

@model TestModel
<form asp-controller="Home" asp-action="Test">
    <div class="form-group">
        <label asp-for="date">Start Date*</label>
        <input type="text" asp-for="date" name="date" />
        <div class="invalid-feedback">
            Please Select Start Date.
        </div>
    </div>
    <input type="submit" value="Submit" />
</form>

@section Scripts
{
    <script type="text/javascript" src="https://cdn.jsdelivr.net/jquery/latest/jquery.min.js"></script>
    <script type="text/javascript" src="https://cdn.jsdelivr.net/momentjs/latest/moment.min.js"></script>
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js"></script>
    <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.css" />
    <script>
        $(function () {
            $('input[name="date"]').daterangepicker({
                autoUpdateInput: false,
                locale: {
                    cancelLabel: 'Clear'
                }
            });
            $('input[name="date"]').on('apply.daterangepicker', function (ev, picker) {
                $(this).val(picker.startDate.format('MM/DD/YYYY') + ' - ' + picker.endDate.format('MM/DD/YYYY'));
                var data = {
                    date: picker.startDate.format('MM/DD/YYYY') + ' - ' + picker.endDate.format('MM/DD/YYYY')
                };
            });

            $('input[name="date"]').on('cancel.daterangepicker', function (ev, picker) {
                $(this).val('');
            });
        });
    </script>
}

控制器:

[HttpPost]
public void Test(TestModel test)
{
    //do your stuff...
}

结果:

【讨论】:

  • 当然。我已经更改了我的代码。检查剃刀视图,我更改了输入的名称,并且不要忘记更改 jquery。您可能会收到您模型中的日期范围字符串在行动中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-17
  • 2018-09-01
  • 2019-11-11
  • 2020-11-16
  • 2018-12-28
  • 1970-01-01
  • 2018-02-13
相关资源
最近更新 更多