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

如何通过DateRangeViewModel自身更新表单提交的属性值?

解决DateRangeViewModel自更新时的StackOverflowException问题

需求是让DateRangeViewModel自身处理表单提交的日期值,无需控制器介入。比如用户提交2022-01-01 12:00:00 AM,希望To字段自动更新为2022-01-02 12:00:00 AM,但原代码抛出System.StackOverflowException异常:

public class DateRangeViewModel
{
    public DateTime? From { get; set; }
    public DateTime? To { 
        get 
        {
            if (!To.HasValue) { return null; }
            return To.Value.AddDays(1);
        }
        set {}
    }
}

异常原因

在To属性的get访问器中,直接访问To.HasValue和To.Value会再次触发To的get访问器调用,形成无限递归,最终导致栈溢出。

解决方案

使用私有字段存储原始提交值,在get访问器中基于私有字段处理逻辑,避免递归调用:

public class DateRangeViewModel
{
    public DateTime? From { get; set; }
    
    // 私有字段存储表单提交的原始To值
    private DateTime? _to;
    
    public DateTime? To 
    { 
        get 
        {
            if (!_to.HasValue) 
            { 
                return null; 
            }
            // 基于原始值返回加1天后的结果
            return _to.Value.AddDays(1);
        }
        set 
        { 
            // 接收表单提交的值并存储到私有字段
            _to = value; 
        }
    }
}

这样处理后,表单提交的值会存入私有字段_to;获取To属性值时,直接返回_to加1天后的结果,完全在ViewModel内部完成值的更新,无需控制器介入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:55:20