You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Razor页面编辑页中MissionDay下拉框无法自动选中数据库存储值的问题求助

解决Razor编辑页面MissionDay无法自动选中数据库值的问题

我完全懂你的困扰——页面加载时Razor已经帮你把数据库里的MissionDay值选中了,但紧接着执行的missionTime()函数会重新生成下拉选项,直接覆盖了原本的选中状态。咱们只需要在重新生成选项后,把之前保存的数据库值再选回去就行,具体修改方案如下:

核心思路:保存原有选中值,生成选项后恢复

在missionTime()函数开头先把当前MissionDay的选中值存起来,等重新生成完下拉选项后,再把这个值设置回去。如果保存的值不在新的选项列表里(比如用户原来选的是周日,但现在MissionTime改成了每天),就默认选中第一个选项,避免出现无选中状态的情况。

修改后的完整JavaScript代码

<script>
$(document).ready(function () {
  missionTime ();
  $("#MissionTime").change(function () {
    missionTime ();
  });
  $("#MissionDay").change(function () {
    var d = new Date ();
    var val = $(this).val ();
    if (val == "Sunday") {
      d.setDate (d.getDate () + ((7 - d.getDay ())% 7 + 0)% 7);
    } else if (val == "Monday") {
      d.setDate (d.getDate () + ((7 - d.getDay ())% 7 + 1)% 7);
    } else if (val == "Tuesday") {
      d.setDate (d.getDate () + ((7 - d.getDay ())% 7 + 2)% 7);
    } else if (val == "Wednesday") {
      d.setDate (d.getDate () + ((7 - d.getDay ())% 7 + 3)% 7);
    } else if (val == "Thursday") {
      d.setDate (d.getDate () + ((7 - d.getDay ())% 7 + 4)% 7);
    } else if (val == "startMonth") {
      d.setMonth (d.getMonth () + 1, 1);
    } else if (val == "middleMonth") {
      var dt = d.getDate ();
      d.setDate (15);
      if (dt>= 15) {
        d.setMonth (d.getMonth () + 1);
      }
      d.setHours (23, 59, 59, 0);
    } else if (val == "endMonth") {
      d.setMonth (d.getMonth () + 1);
      d.setDate (0);
    } else if (val == "firstYear") {
      d = new Date (new Date ().getFullYear () +1, 0, 1);
    } else if (val == "lastYear") {
      d = new Date (new Date ().getFullYear (), 11, 31);
    }
    var dd = String (d.getDate ()).padStart (2, '0');
    var mm = String (d.getMonth () + 1).padStart (2, '0');
    var yyyy = d.getFullYear ();
    d = yyyy + '-' + mm + '-' + dd;
    document.getElementById ("firstDate").value = d;
  });
  function missionTime () {
    // 先保存当前MissionDay的选中值
    var savedDayValue = $("#MissionDay").val();
    
    var val = $("#MissionTime").val();
    if (val == "1") {
      $("#MissionDay").html("<option value='0'> without </option>");
      today ();
      // 恢复选中值,不存在则选默认的0
      $("#MissionDay").val(savedDayValue || "0");
    } else if (val == "7") {
      $("#MissionDay").html("<option value='Sunday'> Sunday </option> <option value='Monday'> Monday </option> <option value='Tuesday'> Tuesday </option> <option value='Wednesday'> Wednesday </option> <option value='Thursday'> Thursday </option> ");
      var d = new Date ();
      d.setDate (d.getDate () + ((7 - d.getDay ())% 7 + 0)% 7);
      var dd = String (d.getDate ()).padStart (2, '0');
      var mm = String (d.getMonth () + 1).padStart (2, '0');
      var yyyy = d.getFullYear ();
      d = yyyy + '-' + mm + '-' + dd;
      document.getElementById ("firstDate").value = d;
      // 检查保存的值是否在新选项里,存在则选中,否则默认选Sunday
      if ($("#MissionDay option[value='" + savedDayValue + "']").length) {
        $("#MissionDay").val(savedDayValue);
      } else {
        $("#MissionDay").val("Sunday");
      }
    } else if (val == "30") {
      // 修复原代码的语法错误,补全月份选项
      $("#MissionDay").html("<option value='startMonth'> start of month </option> <option value='middleMonth'> middle of month </option> <option value='endMonth'> end of month </option>");
      var d = new Date ();
      d.setMonth (d.getMonth () + 1, 1);
      var dd = String (d.getDate ()).padStart (2, '0');
      var mm = String (d.getMonth () + 1).padStart (2, '0');
      var yyyy = d.getFullYear ();
      d = yyyy + '-' + mm + '-' + dd;
      document.getElementById ("firstDate").value = d;
      // 恢复选中值,不存在则默认选startMonth
      if ($("#MissionDay option[value='" + savedDayValue + "']").length) {
        $("#MissionDay").val(savedDayValue);
      } else {
        $("#MissionDay").val("startMonth");
      }
    } else if (val == "365") {
      $("#MissionDay").html("<option value='firstYear'> beginning of year </option> <option value='lastYear'> end of year </option>");
      // 恢复选中值,不存在则默认选firstYear
      if ($("#MissionDay option[value='" + savedDayValue + "']").length) {
        $("#MissionDay").val(savedDayValue);
      } else {
        $("#MissionDay").val("firstYear");
      }
    } else if (val == "0") {
      $("#MissionDay").html("<option value='0'> without </option>");
      today ();
      $("#MissionDay").val(savedDayValue || "0");
    }
  }
  function today () {
    var today = new Date ();
    var dd = String (today.getDate ()).padStart (2, '0');
    var mm = String (today.getMonth () + 1).padStart (2, '0');
    var yyyy = today.getFullYear ();
    today = yyyy + '-' + mm + '-' + dd;
    document.getElementById ("firstDate").value = today;
  }
});
</script>

额外修复说明

我注意到你原代码中val == "30"的分支存在语法错误(. / option>),已经在修改后的代码里补全了正确的月份选项,确保代码能正常运行。

这样修改后,编辑页面加载时,MissionDay就能正确显示数据库里存储的值,同时动态切换MissionTime的交互功能也不会受影响。

内容的提问来源于stack exchange,提问作者R H segal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 10:09:08