gpt4 book ai didi

c# - MVC 中的显示与编辑模式

转载 作者:太空宇宙 更新时间:2023-11-03 13:21:32 25 4
gpt4 key购买 nike

我正在创建一个从用户那里收集数字数据的 MVC 5 网络项目。大多数字段都是可为 null 的小数,我需要将它们显示到不同的小数位,同时在写回数据库时保持完整的精度。

View 模型具有如下属性:

public decimal? TonnesOfFoo { get; set; }
public decimal? TonnesOfBar { get; set; }

View 本身将控件呈现为:

@Html.TextBoxFor(model => model.TonnesOfFoo, "{0:N1}", new { @class = "form-control" }) 
@Html.TextBoxFor(model => model.TonnesOfBar, "{0:N3}", new { @class = "form-control" })

这很好用并根据需要显示数据,但是当表单回发时,我将舍入值写回数据库。

如果我的 View 模型中没有“实际”和“显示”属性并使用 jQuery 将它们全部同步,是否有任何解决方法?我可以使用某种编辑器模板来处理这种情况吗?

更新

根据 M.Ob 的建议,我终于成功了。

我不再使用内联格式,而是使用两个数据属性,一个用于完全精度,一个用于所需的小数位数。例如:

@Html.TextBoxFor(model => model.TonnesOfFoo, new { @class = "form-control", data_fullprecision = Model.TonnesOfFoo, data_precision = 1 })

然后在文档准备就绪时我循环并使用 jQuery Number Plugin 手动应用格式:

$('input[data-fullprecision]').each(function () {
var selector = '#' + this.id;
var precision = parseInt($(selector).data('precision'));
var fullprecisionValue = $(selector).data('fullprecision');

if ($.isNumeric(fullprecisionValue)) {
var roundedValue = $.number(fullprecisionValue, precision, '.', '');
$(selector).val(roundedValue);
}
});

我不确定上面的内容是否矫枉过正,但如果 Controller 中出现任何验证错误,我需要一种方法以正确的格式呈现数据,否则,未舍入的值将与验证消息一起显示。

我使用类似的脚本在用户更改值时将值映射到数据属性,并最终在提交表单之前将完整精度数字映射到文本框。

最佳答案

可能有更优雅的方式,但这里有一个想法:

您可以这样做:将完整精度值存储在文本框的数据属性中。然后,当用户更改文本时,使用 JS 将 data- 属性更新为新值。在表单发布后,您可以让 JS 函数在提交发生之前使用数据值更新文本框的值。这样,您所有的新(更新)值和未修改的文本框值都将正确发布而不是四舍五入。

@Html.TextBoxFor(model => model.TonnesOfFoo, "{0:N1}", new { @class = "form-control", data_fullprecision = Model.TonnesOfFoo })

关于c# - MVC 中的显示与编辑模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23950272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com