我需要实现一个功能,允许用户以任何形式输入价格,即允许 10 美元、10 美元、10 美元……作为输入。
我想通过为 Price 类实现一个自定义模型绑定器来解决这个问题。
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 输入中输入可转换为十进制的字符串,默认模型绑定器就可以很好地工作。我想允许像“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?