【发布时间】:2010-03-19 21:34:17
【问题描述】:
我需要实现一个功能,允许用户以任何形式输入价格,即允许 10 美元、10 美元、10 美元……作为输入。
我想通过为 Price 类实现一个自定义模型绑定器来解决这个问题。
class Price { decimal Value; int ID; }
表单包含一个数组或价格作为键
keys:
"Prices[0].Value"
"Prices[0].ID"
"Prices[1].Value"
"Prices[1].ID"
...
ViewModel 包含 Price 属性:
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?
【问题讨论】:
-
我猜对了,ID 是用户 ID,而不是货币 ID?
-
即定价类型的ID,与本题无关
-
不需要多种货币 - 我们固定为单一货币,但需要允许问题中提到的各种输入格式
标签: asp.net-mvc arrays modelbinders imodelbinder custom-model-binder