MVC-通过ajax将js变量传递给控制器​​,然后在视图中使用它

时间:2019-02-21 10:11:20

标签: javascript ajax model-view-controller

脚本:

<script type="text/javascript">
$(function () {
    $('#datetimepicker').datetimepicker({
        disabledDates: [
            new Date()
        ],
        inline: true,
        format: 'L',
        daysOfWeekDisabled: [0, 6],
        minDate: new Date(),
        useCurrent: false
    });

    $('#datetimepicker').on('change.datetimepicker', function (event) {
        var formatted_date = event.date.format('M/DD/YYYY');
        $('#datetimepickerOut').val(formatted_date);

        $.ajax({
            url: '@Url.Action("Create")',
            contentType: 'application/html; charset=utf-8',
            data: { calendarDate: formatted_date },
            success: function (data) {
                $('#divTimeSlots').fadeIn("slow");
            },
            failure: function (result) {
                alert(errMsg);
            }
        });

    });

    $('#divTimeSlots input').on('change', function (event) {
        $('#SlotTimeOut').val($("[type='radio']:checked").val());
    });
});
</script>

控制器:

public ActionResult Create(string calendarDate)
{
    testViewModel mvm = new testViewModel();

    mvm.myDate = calendarDate;
}

创建视图:

<div class="col-md-5" id="divTimeSlots" style="display: none;">
@{
    var getDate = Model.myDate;

    foreach (var rTimeSlots in Model.ListSlotTimeForRadio.Where(n =>
        n.BranchCode == "MNL1" &&
        n.Slots > 0
        &&
        n.SlotCode == getDate
        ))
    {
        @Html.RadioButtonFor(model => model.ListSlotTimeForRadio, rTimeSlots.SlotTime,
        new { htmlAttributes =
            new Dictionary<string, object>
            {
                { "id", "timeSlots" },
                { "class", "form-control" }
            }
        })

        @rTimeSlots.SlotTime<br>
    }
}
</div>
正如您在我的脚本中看到的那样,

是内联日期选择器。当我单击时间选择器中的任何日期时,该值将传递给变量formatted_date。 formatted_date也将通过ajax传递给控制器​​(请参见calendarDate)。然后将calendarDate作为myDate传递到模型(请参见控制器)。单击任何日期,单选按钮将基于脚本中的foreach和.fadein(“ slow”)出现。但是,当我在foreach中添加&& n.SlotCode == getDate时,单选按钮列表没有出现。 getDate是myDate。

当我使用&& n.SlotCode ==“ 2/22/2019”时,显示单选按钮列表。但是当我使用== getDate时,它不起作用。

debugged controller debugged view

在调试时,我正确地获取了日期。但是单选按钮列表没有出现,我将其放置在成功函数中。但似乎无法正常工作。

我不知道怎么了。请帮忙。 tia

2 个答案:

答案 0 :(得分:1)

您在ajax调用中缺少参数。添加

    $.ajax({
        url: '@Url.Action("Create")',
        type: 'POST',
        contentType: 'application/html; charset=utf-8',
        data: { calendarDate: formatted_date },
        success: function (data) {}

此刻您什么都没发送给控制器

答案 1 :(得分:0)

您可以调试视图代码,看看下面的代码是否返回true:

.SlotCode == getDate

我假设满足以下条件

n.BranchCode ==“ MNL1” &&         n。插槽> 0

这是您看不到单选按钮的唯一原因。