gpt4 book ai didi

c# - 在 MVC 4 中操作模型绑定(bind)

转载 作者:太空宇宙 更新时间:2023-11-03 11:12:58 25 4
gpt4 key购买 nike

这个用例子更容易解释。假设我有一个 person 类

Public Person
{
string firstName;
string SocialSecurityNumber;
}

当用户在网页中进行某些更改时,Person 对象将回传到接受 Person 作为输入参数的 Controller 。社会安全号码已加密。我们有许多回发对象(不一定是 Person 类)的页面,这些对象已将社会保险作为参数进行加密。现在我想修改模型绑定(bind),这样如果发布的对象具有 SocialSecurityNumber 作为属性,它应该被自动解密。我该怎么做?

最佳答案

您可以使用自定义模型 Binder 。一些例子:

这是我之前使用过的一个简单示例,您可以根据需要进行修改:

public class FormatterModelBinder : DefaultModelBinder
{
internal static string TrimValue([CanBeNull] string value, [CanBeNull] FormatAttribute formatter)
{
if (string.IsNullOrEmpty(value)) return value;
return ((formatter == null) || formatter.Trim) ? value.Trim() : value;
}

protected override void SetProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value)
{
if ((propertyDescriptor != null) && (propertyDescriptor.PropertyType == typeof(string)))
{
var stringValue = value as string;
var formatter = propertyDescriptor.Attributes.OfType<FormatAttribute>().FirstOrDefault();
stringValue = TrimValue(stringValue, formatter);
value = stringValue;
}

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

然后您可以根据需要创建一个属性来装饰属性:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public sealed class FormatAttribute : Attribute
{
public FormatAttribute()
{
Trim = true;
}

public bool Trim { get; set; }
}

这是由 ViewModel 中的属性“激活”的

Public Person
{
string firstName;
[Format(Trim = true)]
string SocialSecurityNumber;
}

修改它以允许加密应该相当简单。

关于c# - 在 MVC 4 中操作模型绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13446410/

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