如何让MVC模型绑定器返回空字符串而不是null与剃刀编辑器模板

本文关键字:null 剃刀 编辑器 字符串 MVC 模型 绑定 返回 | 更新日期: 2023-09-27 18:13:29

我有一个名为String的编辑器模板,它具有以下html:

<input type="text" name="@ViewData.ModelMetadata.PropertyName" 
    value="@(Model != null ? Model : string.empty)" style="width: 200px" />

由于某种原因,如果我留下未填充的文本框,当我发回时,视图模型上的数据类型String的属性为空。我设置这个编辑器模板的方式,不应该这些值是空字符串代替?我很好奇为什么这不起作用。

我认为我唯一的其他选择是创建我自己的自定义模型绑定器,它将自动将我所有的空值转换为字符串。

任何建议吗?

如何让MVC模型绑定器返回空字符串而不是null与剃刀编辑器模板

我设置这个编辑器模板的方式,不应该这些值是空字符串代替?

不。

我很好奇为什么这不起作用。

HTTP协议不知道String.Emptynull之间的区别(它与语言无关,即Perl, PHP, Java, Phyton会做什么?)。所有值都作为字符串传递,因此没有null的概念。默认的ModelBinder只是返回null,因为它比String.Empty更实用(也就是说,在参数的上下文中,null通常表示没有传递值)。

如何让MVC模型绑定器返回空字符串而不是null与剃刀编辑器模板?

对于剃须刀编辑器来说是不可能的。记住HTTP是不可知论的,所以你有很多选择;自定义ModelBinder,通过Javascript/jQuery输入检测指定值的隐藏字段,在验证期间修改值(IValidateObject)等