从Razor View接收POST请求时,为什么我会得到null而不是空字符串?

Ale*_*lex 70 string asp.net-mvc null viewmodel razor

当没有值时,我曾经收到空字符串:

[HttpPost]
public ActionResult Add(string text)
{
    // text is "" when there's no value provided by user
}
Run Code Online (Sandbox Code Playgroud)

但现在我正在传递一个模型

[HttpPost]
public ActionResult Add(SomeModel Model)
{
    // model.Text is null when there's no value provided by user
}
Run Code Online (Sandbox Code Playgroud)

所以我必须使用?? ""运算符.

为什么会这样?

小智 149

您可以DisplayFormat在模型类的属性上使用该属性:

[DisplayFormat(ConvertEmptyStringToNull = false)]
Run Code Online (Sandbox Code Playgroud)

  • 这是一条很长的路,但是,在MVC6中,如果您(像我一样)由于某种原因不希望通过属性设置它并想要将元数据存储在其他地方,您可以编写自己的元数据提供程序并在Startup中注册它.cs喜欢:`AddMvc(o => ModelMetadataDetailsProviders.Add(new YourProvider()))`.在`GetDisplayMetadata`中,你可以做每个属性.对于这个问题,它将是`context.DisplayMetadata.ConvertEmptyStringToNull = false;` (3认同)
  • 大!这应该标记为答案;) (2认同)

hac*_*sid 9

默认的模型绑定将为您创建一个新的SomeModel.字符串类型的默认值为null,因为它是引用类型,因此它被设置为null.

这是string.IsNullOrEmpty()方法的用例吗?