gpt4 book ai didi

asp.net-mvc - MVC 模型绑定(bind)到集合不以 0 索引开头的集合

转载 作者:行者123 更新时间:2023-12-04 01:07:27 24 4
gpt4 key购买 nike

我正在尝试对集合中项目的属性执行远程验证。验证适用于集合的第一项。验证方法的 http 请求如下所示:

/Validation/IsImeiAvailable?ImeiGadgets[0].ImeiNumber=123456789012345

但是,在 url 如下所示的第二个项目中,验证不起作用
/Validation/IsImeiAvailable?ImeiGadgets[1].ImeiNumber=123456789012345

现在我很确定这样做的原因是绑定(bind)不会在不以零索引开头的集合上工作。

我的验证方法具有如下签名:
public JsonResult IsImeiAvailable([Bind(Prefix = "ImeiGadgets")] Models.ViewModels.ImeiGadget[] imeiGadget)

因为我在集合中传递一个项目,所以我必须像这样绑定(bind),但我真正传递的只是一个值。

除了将它绑定(bind)为普通的旧查询字符串之外,我是否可以处理这个问题。

谢谢

编辑:这是获取 Imei 变量的快速修复,但我宁愿使用模型绑定(bind):
string imeiNumber = Request.Url.AbsoluteUri.Substring(Request.Url.AbsoluteUri.IndexOf("=")+1);

编辑:这是我的 ImeiGadget 类(class):
public class ImeiGadget
{
public int Id { get; set; }

[Remote("IsImeiAvailable", "Validation")]
[Required(ErrorMessage = "Please provide the IMEI Number for your Phone")]
[RegularExpression(@"(\D*\d){15,17}", ErrorMessage = "An IMEI number must contain between 15 & 17 digits")]
public string ImeiNumber { get; set; }
public string Make { get; set; }
public string Model { get; set; }
}

最佳答案

您可以编写自定义模型绑定(bind)器:

public class ImeiNumberModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var modelName = bindingContext.ModelName;
var request = controllerContext.HttpContext.Request;
var paramName = request
.Params
.Keys
.Cast<string>()
.FirstOrDefault(
x => x.EndsWith(modelName, StringComparison.OrdinalIgnoreCase)
);

if (!string.IsNullOrEmpty(paramName))
{
return bindingContext
.ValueProvider
.GetValue(request[paramName])
.AttemptedValue;
}

return null;
}
}

然后将其应用于 Controller 操作:
public ActionResult IsImeiAvailable(
[ModelBinder(typeof(ImeiNumberModelBinder))] string imeiNumber
)
{
return Json(!string.IsNullOrEmpty(imeiNumber), JsonRequestBehavior.AllowGet);
}

现在 ImeiGadgets[xxx]部分将从查询字符串中被忽略。

关于asp.net-mvc - MVC 模型绑定(bind)到集合不以 0 索引开头的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10760035/

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