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

ASP.NET MVC中WebGrid取消事件处理器异常问题求助

解决ASP.NET MVC WebGrid取消编辑后输入框为空的问题

我之前处理WebGrid编辑逻辑时也遇到过类似的问题,咱们来拆解下原因和解决办法:

问题根源

问题出在disabled状态的输入框上。当@item.Truefalse为true时,你的输入框被设置为disabled,而在取消编辑的事件处理器中,直接用input.val(span.html())尝试给disabled的输入框赋值——部分浏览器会忽略对disabled元素的val()修改操作。这就导致当你再次打开编辑时,输入框里还是最初的"0000-00-00"(甚至因为渲染问题显示为空),而不是span里的原始内容。

解决方案

方法一:临时移除disabled属性再赋值

修改你的取消事件处理器,在给disabled输入框赋值前先移除disabled属性,赋值完成后再恢复:

$("body").on("click", "#WebGrid TBODY .Cancel", function () {
    var row = $(this).closest("tr");
    $("td", row).each(function () {
        if ($(this).find(".text").length > 0) {
            var span = $(this).find(".label2");
            var input = $(this).find(".text");
            
            // 保存输入框原本的disabled状态
            var wasDisabled = input.prop("disabled");
            if (wasDisabled) {
                input.prop("disabled", false);
            }
            
            // 赋值操作
            input.val(span.html());
            
            // 恢复disabled状态
            if (wasDisabled) {
                input.prop("disabled", true);
            }
            
            span.show();
            input.hide();
        }
    });
    row.find(".Edit").show();
    row.find(".Update").hide();
    $(this).hide();
});

方法二:用data属性存储原始值(更稳定)

在生成输入框时,把原始值存在data-original属性里,取消编辑时直接从这个属性取值,避免对disabled元素的val()操作限制:

首先修改WebGrid的Column定义:

webGrid.Column(header: "day_gv", style: "day_gv", format: @<span>
    <span class="label2">@item.day_gv</span>
    @if (@item.Truefalse) {
        <span><input class="text" type="text" value="@item.day_gv" style="display:none" disabled data-original="@item.day_gv" /></span>
    } else {
        <span><input class="text" type="text" value="@item.day_gv" style="display:none" data-original="@item.day_gv" /></span>
    }
</span>)

webGrid.Column(header: "day_hh", style: "day_hh", format: @<span>
    <span class="label2">@item.day_hh</span>
    @if (@item.Truefalse) {
        <span><input class="text" type="text" value="@item.day_hh" style="display:none" disabled data-original="@item.day_hh" /></span>
    } else {
        <span><input class="text" type="text" value="@item.day_hh" style="display:none" data-original="@item.day_hh" /></span>
    }
</span>)

然后修改取消事件处理器:

$("body").on("click", "#WebGrid TBODY .Cancel", function () {
    var row = $(this).closest("tr");
    $("td", row).each(function () {
        if ($(this).find(".text").length > 0) {
            var span = $(this).find(".label2");
            var input = $(this).find(".text");
            
            // 从data属性获取原始值赋值
            input.val(input.data("original"));
            
            span.show();
            input.hide();
        }
    });
    row.find(".Edit").show();
    row.find(".Update").hide();
    $(this).hide();
});

这样不管输入框是否disabled,都能正确恢复原始值,再次打开编辑时就不会出现空值的问题了。

内容的提问来源于stack exchange,提问作者Edward Sheriff Curtis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:47:38