gpt4 book ai didi

asp.net-mvc - ASP.NET MVC - 能够处理数组的自定义模型绑定(bind)器

转载 作者:行者123 更新时间:2023-12-04 05:10:41 24 4
gpt4 key购买 nike

我需要实现一个功能,允许用户以任何形式输入价格,即允许 10 美元、10 美元、10 美元……作为输入。

我想通过为 Price 类实现自定义模型绑定(bind)器来解决这个问题。

 class Price { decimal Value; int ID; } 

表单包含一个数组或价格作为键
keys:
"Prices[0].Value"
"Prices[0].ID"
"Prices[1].Value"
"Prices[1].ID"
...

ViewModel 包含一个价格属性:
public List<Price> Prices { get; set; }

只要用户在 Value 输入中输入可转换为十进制的字符串,默认模型绑定(bind)器就可以很好地工作。
我想允许像“100 USD”这样的输入。

到目前为止,我的价格类型的 ModelBinder:
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
Price res = new Price();
var form = controllerContext.HttpContext.Request.Form;
string valueInput = ["Prices[0].Value"]; //how to determine which index I am processing?
res.Value = ParseInput(valueInput)

return res;
}

如何实现正确处理数组的自定义模型 Binder?

最佳答案

明白了:关键是不要尝试绑定(bind)单个 Price 实例,而是为 List<Price> 实现 ModelBinder类型:

    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
List<Price> res = new List<Price>();
var form = controllerContext.HttpContext.Request.Form;
int i = 0;
while (!string.IsNullOrEmpty(form["Prices[" + i + "].PricingTypeID"]))
{
var p = new Price();
p.Value = Process(form["Prices[" + i + "].Value"]);
p.PricingTypeID = int.Parse(form["Prices[" + i + "].PricingTypeID"]);
res.Add(p);
i++;
}

return res;
}

//register for List<Price>
ModelBinders.Binders[typeof(List<Price>)] = new PriceModelBinder();

关于asp.net-mvc - ASP.NET MVC - 能够处理数组的自定义模型绑定(bind)器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2350689/

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