数据绑定 – Asp.Net核心模型绑定,如何将空字段绑定为空字符串?
发布时间:2020-12-16 06:50:44 所属栏目:asp.Net 来源:网络整理
导读:如果提交了类似下面的表单并且MyField在表单上保留为空白,则默认情况下,Asp.Net Core模型绑定将null置于模型上的相应属性中,如下所示. 示例表格 form asp-controller="SomeController" asp-action="SomeAction" label asp-for="MyField"My Field/labelinput
如果提交了类似下面的表单并且MyField在表单上保留为空白,则默认情况下,Asp.Net Core模型绑定将null置于模型上的相应属性中,如下所示.
示例表格 <form asp-controller="SomeController" asp-action="SomeAction"> <label asp-for="MyField">My Field</label><input asp-for="MyField" type="text" /> <button type="submit">Submit</button> </form> 示例模型 public class MyModel{ public string MyField { get; set; } } 示例操作方法 [HttpPost] public IActionResult Post(MyModel m) { //m.MyField will be null if the field was left empty //but I want it set to a blank string by the model binder } 但是,由于MyField实际上是在Http Post主体中传输的,我更喜欢模型绑定器将模型上的MyField属性设置为空字符串,而不是将其设置为null.对于在Http Post主体中没有传输MyField的情况,我宁愿保留null.如何更改模型绑定器以显示此行为? 解决方法
在
https://github.com/aspnet/Mvc/blob/rel/1.1.3/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/SimpleTypeModelBinder.cs研究SimpleTypeModelBinder的Asp.Net核心代码我可以看到有一个ModelMetadata.ConvertEmptyStringToNull设置,默认设置为true,导致空字符串在数据绑定时转换为null.但该属性是只读的,所以一开始我无法弄清楚如何改变它的价值.
@ rsheptolut在这个页面上的帖子https://github.com/aspnet/Mvc/issues/4988让我找到了解决方案. 解: 该值必须在启动时设置.这可以通过这个类来完成: public class CustomMetadataProvider : IMetadataDetailsProvider,IDisplayMetadataProvider { public void CreateDisplayMetadata(DisplayMetadataProviderContext context) { if (context.Key.MetadataKind == ModelMetadataKind.Property) { context.DisplayMetadata.ConvertEmptyStringToNull = false; } } } 当它在startup.cs文件的ConfigureServices方法中将其连接到MvcOptions时就像这样 services.AddMvc() .AddMvcOptions(options => options.ModelMetadataDetailsProviders.Add(new CustomMetadataProvider ())); 现在网站范围内,回发的空白字段的默认值将是数据绑定器将相应的模型属性设置为空字符串而不是null.是啊! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-3 – ASP.NET MVC强类型HTML帮助程序
- asp.net-mvc-3 – 数据注释MVC3必需属性
- asp.net-mvc – 请求验证 – ASP.NET MVC 2
- asp.net-mvc – 如何在Html.RenderAction(MVC3)中发送模型对
- asp.net-mvc-3 – html.TextBoxFor和html.Textbox,POSTing值
- 无法启动任何ASP.NET项目
- asp.net-mvc – 在IE中清除cookie后,保持用户登录的是什么?
- 在WinForms中验证用户(与ASP.Net无关)
- asp.net core高级EF Core2.0数据模型设计创建
- asp.net – Url片段为空
推荐文章
站长推荐
- 如何杀死会话或会话ID(ASP.NET/C)
- 使用ASP.NET重定向到非www-url域?
- asp.net-mvc – 如何使用需要js的Kendo UI MVC E
- asp.net-mvc – 在Action Filter中不正确地存储实
- ASP.NET MVC授权:角色的权限
- asp.net-mvc – ASP.NET MVC – 使用表单发布多个
- asp.net-mvc-2 – ASP.NET MVC 2 – 如何使用Dro
- 如何在运行时将ASP.Net控件移动到Web窗体上的不同
- ASP.NET MembershipProvider加密/解密
- asp.net-mvc – Request.GetOwinContext在单元测
热点阅读