通过 Javascript 将 DatePicker 值传递给 C# 控制器

Posted

技术标签:

【中文标题】通过 Javascript 将 DatePicker 值传递给 C# 控制器【英文标题】:Passing DatePicker value via Javavscript to C# Controller 【发布时间】:2016-02-19 00:31:32 【问题描述】:

我有一个引导数据选择器,我需要使用 javascript 将值传递给我的控制器中的 C# 代码。我知道如何使用 javascript 调用控制器内部的函数,但我不确定如何传递 datepicker 的值。这一切都需要在单击按钮时发生。这是我的日期选择器的代码:

<div class="row spiff-datepicksection">
            <div class="col-lg-6 pull-right">
                <div class="col-sm-5 col-lg-offset-4">
                    <div class="form-group">
                        <div class="input-group date">
                            <input id="datetimepicker1" type="text" class="form-control" id="startDate" />
                            <span class="input-group-addon">
                                <span class="glyphicon glyphicon-calendar"></span>
                            </span>
                        </div>
                    </div>
                </div>
                <div class="col-lg-3">
                    <input class="spiffdate-btn" type="submit" value="Submit" />
                </div>
            </div>
        </div>

这是我的 javascript:

 <script>
    $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) 
        var wrongid = $('.tab-content .active').attr('id');
        $('a[data-toggle="tab"]').removeClass("active");
        $(this).addClass("active"); 
        var correctid = $(this).data("id"); 
        alert($('.tab-content .active')[0].outerhtml); 
        if (correctid == "delayedspiff")
            $.get("@Url.Action("DelayedSpiffDate", "Dashboard")");
        else 
            $.get("@Url.Action("InstantSpiffDate", "Dashboard")");

    );
</script>

这是我的控制器:

 public ActionResult DelayedSpiffDate(DateTime startDate)
    
        var available = _appService.GetFeatureStatus(1, "spiffDashboard");
        if (!available)
            return RedirectToAction("DatabaseDown", "Error", new  area = "" );

        var acctId = User.AccountID;
        startDate = DateTime.Today.AddDays(-6);  // -6
        var endDate = DateTime.Today.AddDays(1); // 1

        Dictionary<DateTime, List<SpiffSummaryModel>> dict = new Dictionary<DateTime, List<SpiffSummaryModel>>();

        try
        
            var properties = new Dictionary<string, string>
            
                 "Type", "DelayedSpiff" 
            ;
            telemetry.TrackEvent("Dashboard", properties);

            dict = _reportingService.GetDailyDelayedSpiffSummaries(acctId, startDate, endDate);

        
        catch (Exception e)
        
            if (e.InnerException is SqlException && e.InnerException.Message.StartsWith("Timeout expired"))
            
                throw new TimeoutException("Database connection timeout");
            
            var error = _errorCodeMethods.GetErrorModelByTcError(PROJID.ToString("000") + PROCID.ToString("00") + "001", "Exception Getting DelayedSpiff Dashboard View", PROJID, PROCID);
            error.ErrorTrace = e.ToString();
            _errorLogMethods.LogError(error);
            return RedirectToAction("index", "error", new  error = error.MaskMessage );
        

        var spiffDateModels = new List<DelayedSpiffDateModel>();

        foreach (var entry in dict)
        
            var spiffDateModel = new DelayedSpiffDateModel();

            spiffDateModel.Date = entry.Key;

            spiffDateModel.Carriers = new List<DelayedSpiffCarrierModel>();

            foreach (var item in entry.Value)
            
                var spiffCarrierModel = new DelayedSpiffCarrierModel();
                spiffCarrierModel.Carrier = item.CarrierName;
                spiffCarrierModel.CarrierId = item.CarrierId;
                spiffCarrierModel.ApprovedSpiffTotal = item.ApprovedSpiffTotal;
                spiffCarrierModel.EligibleActivationCount = item.EligibleActivationCount;
                spiffCarrierModel.IneligibleActivationCount = item.IneligibleActivationCount;
                spiffCarrierModel.PotentialSpiffTotal = item.PotentialSpiffTotal;
                spiffCarrierModel.SubmittedActivationCount = item.SubmittedActivationCount;
                spiffCarrierModel.UnpaidSpiffTotal = item.UnpaidSpiffTotal;
                spiffDateModel.Carriers.Add(spiffCarrierModel);
            

            spiffDateModels.Add(spiffDateModel);
        
        spiffDateModels = spiffDateModels.OrderByDescending(x => x.Date).ToList();

        return PartialView(spiffDateModels);
    

当前开始日期设置为 datetime.today。我需要它从日期选择器中获取日期。让我知道是否需要任何进一步的信息。谢谢。

【问题讨论】:

你可以使用$.post('/DelayedSpiffDate/Dashboard', startDate: $('#datetimepicker1').val()) 顺便说一下,您的输入有 2 个 id 属性。删除其中一个。 【参考方案1】:

在您的 javascript 中,添加此行以获取日期选择器文本框的值(顺便说一下,您的日期选择器上有两个 id 属性):

var startDate = $('#startDate').val();

然后将它与您的 $.get 调用一起传递,如下所示:

$.get('@Url.Action("DelayedSpiffDate", "Dashboard")',  startDate: startDate );

【讨论】:

谢谢JB06,数据传递正常! 或者更短$.get('/DelayedSpiffDate/Dashboard', startDate: $('#startDate').val()) +1:) @RezaAghaei 是的,不过我不会硬编码网址,如果你可以使用 Html 帮助器就不会。

以上是关于通过 Javascript 将 DatePicker 值传递给 C# 控制器的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 通过JavaScript通过ID将HTML注入对象

如何使用已选择的值设置 jQuery datepicker 的默认日期

BootStrap 年份范围

在 MVC 2 中将 css 类添加到 Html.EditorFor

通过 Javascript 将 cookie 设置为 HttpOnly

WeUI移动页面实现时间选择器(年-月-日-时-分)