gpt4 book ai didi

asp.net-mvc - ASP.NET MVC UpdateModel 空属性

转载 作者:行者123 更新时间:2023-12-04 22:26:28 26 4
gpt4 key购买 nike

鉴于以下模型,

public class A
{
public string Name { get; set; }
}

public class B
{
public string Address { get; set; }
public A InstanceOfA { get; set; }
}

看法,
<%= Html.TextBox("A.Name") %>

和 Controller
UpdateModel<B>(b, collection.ToValueProvider());

我的 b 实例将包含 A 的属性,名称为空字符串。

如果没有为 name 输入值,是否有任何让 UpdateModel 将 A 属性设置为 null 的方法?

澄清一下,这是一个简单的案例,我的真实世界场景包含具有数百个此类属性的数据模型。这些数据模型的定义不在我的掌控之中。因此,我需要针对一般情况的解决方案,即如果未输入任何值,则不要创建属性。

进一步说明:我也需要在编辑场景中使用它,即 A.Name 设置为“foo”的 b 实例被编辑以将 A.Name 设置为“”,我希望 A 为空。

最佳答案

我刚刚发现了这种行为(由于检查约束而偶然发现),我认为这是一个错误。我想知道现在有多少开发人员无意中将空字符串保存到他们的数据库中而不是 null? :-)

无论如何,我将对此进行更多探索,看看是否有更好的解决方案。

更新:

这是一个解决方案:

using System.ComponentModel;
using System.Web.Mvc;

namespace CustomerWebsite.Mvc
{
public sealed class EmptyStringToNullModelBinder : DefaultModelBinder
{
protected override void SetProperty(ControllerContext controllerContext,
ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value)
{
if ((value != null)
&& (value.GetType() == typeof(string)
&& ((string)value).Length == 0))
{
value = null;
}

base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value);
}
}
}

在 Application_Start 中输入:
ModelBinders.Binders.DefaultBinder = new EmptyStringToNullModelBinder();

关于asp.net-mvc - ASP.NET MVC UpdateModel 空属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/559846/

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