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

.NET Framework 4.8 Razor页面提交时无法同时获取StartDate与EndDate值

问题原因

StartDate输入框加了disabled="disabled"属性,HTML表单提交时,disabled状态的元素不会被包含在提交的数据中,所以控制器接收不到StartDate的原值,只能用DateTime类型的默认值01/01/0001。

解决方案

方案1:替换disabled为readonly

把StartDate输入框的disabled属性改成readonly,readonly状态的元素不可编辑,但会被表单提交,刚好符合需求:

<input aria-label="date" type="text" id="StartDate" data-bind="value: StartDate" name="StartDate" placeholder="dd/mm/yyyy" readonly="readonly" size="10" maxlength="10" style="margin-left:0px;" />

方案2:保留disabled,新增隐藏字段

如果必须保留disabled状态(比如样式需求),可以在StartDate输入框后面加一个同名的隐藏字段,绑定同一个Knockout observable,提交时隐藏字段会把值传给控制器:

<input aria-label="date" type="text" id="StartDate" data-bind="value: StartDate" name="StartDate" placeholder="dd/mm/yyyy" disabled="disabled" size="10" maxlength="10" style="margin-left:0px;" />
<!-- 新增隐藏字段 -->
<input type="hidden" name="StartDate" data-bind="value: StartDate" />
实现EndDate依赖StartDate的逻辑

用Knockout的subscribe方法监听StartDate的变化,自动处理EndDate的取值逻辑,比如限制EndDate不能早于StartDate,或者默认和StartDate一致:

startDateOb.subscribe(function(newStartValue) {
    // 先判断新的StartDate是否有效
    if (newStartValue) {
        const startDate = new Date(newStartValue);
        const endDate = endDateOb() ? new Date(endDateOb()) : null;
        // 如果EndDate为空或者早于StartDate,自动设置为StartDate
        if (!endDate || endDate < startDate) {
            endDateOb(newStartValue);
        }
    }
});
额外注意事项
  • 确保模型上的日期属性配置了正确的格式解析,避免提交时日期格式不匹配:
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime StartDate { get; set; }

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime EndDate { get; set; }
  • 检查jQuery验证规则,确保新增的EndDate验证逻辑不会影响StartDate的提交值。

内容的提问来源于stack exchange,提问作者Iria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:42:15