如何在javascript中保持cshtml视图对象的值?

如何在javascript中保持cshtml视图对象的值?,javascript,razor,datepicker,Javascript,Razor,Datepicker,在cshtml视图中,我有一个下拉列表,其中有两个可能的选项。若选择返回“True”,则带有2个日期选择器的容器将可见,所以用户可以选择一个日期范围。每当我切换下拉选项时,两个日期选择器都会被分配相应的值 $("#ExpirationChoice").change(function () { var val = $(this).val(); //picks up either True or False if (val) { if (val === "True

在cshtml视图中,我有一个下拉列表,其中有两个可能的选项。若选择返回“True”,则带有2个日期选择器的容器将可见,所以用户可以选择一个日期范围。每当我切换下拉选项时,两个日期选择器都会被分配相应的值

$("#ExpirationChoice").change(function () {
    var val = $(this).val();  //picks up either True or False

    if (val) {
        if (val === "True") {
            $("#expirationDates").show();    //show container with datepickers
            $("#BeginDate").val(getFormattedDate(today()));
            $("#EndDate").val(getFormattedDate(today().addMonths(6)));
        }
        else {
            $("#expirationDates").hide();
            $("#BeginDate").val("");
            $("#EndDate").val(getFormattedDate(today()));
        }
    }
    else {
        alert("Please select an option of past or future expiration report.");
    }
});
假设我从下拉列表中选择了True,选择了一个介于12/23/16和01/23/17之间的1个月范围,单击按钮生成一个表

然后,我将下拉选项切换为False,这导致隐藏容器并将日期值重新分配给日期选择器中的
empty
today
(隐藏,因此用户无法控制)

现在,当我再次切换回True时,我的选择消失了,它再次将其指定为6个月的范围(我理解它为什么这样做,稍后我将解释我的尝试)

我的问题是:当我切换时,如何保持我的最新选择不为True选项?

通过我的尝试的挑战 我完全理解它为什么会这样。我的想法是将从True选项中选择的日期选择器存储到变量中。然而,我突然遇到了一个挑战:

if (val === "True") {
   $("#expirationDates").show();

   $("#BeginDate").val(getFormattedDate(today()));
   $("#EndDate").val(getFormattedDate(today().addMonths(6)));

   var start = $("#BeginDate").val();
   var end = $("#EndDate").val();
}
我需要首先将日期指定为6个月的日期范围。到目前为止,变量正确地存储日期。然而,每当我切换时,日期值将被重新分配回6个月的范围,它将变成一个无限循环

非常感谢您为解决此类问题提供更好的方法。

使用标志变量

var flag = false; //global variable
var start;//global variable
var end;//global variable
if (val === "True") {
   $("#expirationDates").show();

   if(flag == false){
       $("#BeginDate").val(getFormattedDate(today()));
       $("#EndDate").val(getFormattedDate(today().addMonths(6)));
   }
   else {
       $("#BeginDate").val(start);
       $("#EndDate").val(end);
   }
   start = $("#BeginDate").val();
   end = $("#EndDate").val();
   flag = true;
}

我的案例的主要挑战是从日期采集器获取更新的值。在做了一些额外的研究之后,我发现了一个解决我的问题的提示。因此,我没有从.change()获取最新的值,而是将必要的值存储在.click()上

至于我最初的.change(函数),它将其缩小为以下内容:

$("#ExpirationChoice").change(function () {
    var val = $(this).val();


    if (val) {
        if (val === "True") {
            $("#expirationDates").show();
            $("#BeginDate").val(start);
            $("#EndDate").val(end);
        }
        else {
            $("#expirationDates").hide();
            $("#BeginDate").val("");
            $("#EndDate").val(getFormattedDate(today()));
        }
    }
    else {
        alert("Please select an option of past or future expiration report.");
    }
});

据我所见,我将无法从.change()中获取更新的值,我将不得不使用.click()。

否。在false标志上,日期选择器被指定为6个月范围,这些值被指定为从底部开始和结束。现在该标志设置为true,日期选择器被分配给起始值和结束值,这是6个月范围的值。
$("#ExpirationChoice").change(function () {
    var val = $(this).val();


    if (val) {
        if (val === "True") {
            $("#expirationDates").show();
            $("#BeginDate").val(start);
            $("#EndDate").val(end);
        }
        else {
            $("#expirationDates").hide();
            $("#BeginDate").val("");
            $("#EndDate").val(getFormattedDate(today()));
        }
    }
    else {
        alert("Please select an option of past or future expiration report.");
    }
});