希望能够接收空字符串而不是空字符串

本文关键字:字符串 希望 | 更新日期: 2023-09-27 18:36:06

>我有一个带有字符串属性的 mvc 模型,当我收到 json 参数时,在客户端上设置为空字符串,我收到字符串参数的空 i mvc 控制器操作。

我希望能够接收空字符串而不是空字符串,并尝试了以下方法:

[MetadataType(typeof(TestClassMetaData))]
public partial class TestClass
{
}
public class TestClassMetaData
{
     private string _note;
    [StringLength(50, ErrorMessage = "Max 50 characters")]
    [DataType(DataType.MultilineText)]
    public object Note
    {
        get { return _note; }
        set { _note = (string)value ?? ""; }
    }
}

使用此方法会生成验证错误。

有谁知道为什么它不起作用?

还有为什么元数据类使用对象作为属性类型?

希望能够接收空字符串而不是空字符串

添加属性:

[Required(AllowEmptyStrings = true)]

Note的属性定义(实际上应该是 string 类型)。

默认情况下,DefaultModelBinder使用默认值 ConvertEmptyStringToNull,即 true

如果您想更改此行为,您应该使用DisplayFormat属性并将属性ConvertEmptyStringToNull设置为字符串属性的false

public class YourModel
{
    [DisplayFormat(ConvertEmptyStringToNull = false)]
    public string StringProperty { get; set; }
    //...
}

我还没有检查填充解决方案,但您可以尝试一下并为项目中的所有字符串属性实现自定义模型绑定器。

public class CustomStringBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        bindingContext.ModelMetadata.ConvertEmptyStringToNull = false;
        return base.BindModel(controllerContext, bindingContext);
    }
}

实现自定义字符串绑定器后,您应该在 Global.asax 中注册它.cs

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        ModelBinders.Binders.Add(typeof(string), new StringBinder());
    }
}

我希望这段代码有效。