5
모델 바인딩 기능을 만들고 싶습니다. 사용자가 ',' '을 입력 할 수 있습니다.' 내 ViewModel의 double 값에 바인딩하는 통화 값에 대한 등.asp.net MVC 1.0 및 2.0 통화 모델 바인딩
MVC 1.0에서는 사용자 정의 모델 바인더를 만들어이 작업을 수행 할 수 있었지만 MVC 2.0으로 업그레이드 한 이후에는이 기능이 더 이상 작동하지 않습니다.
누구나이 기능을 수행하기위한 아이디어 나 더 나은 솔루션이 있습니까? 더 나은 해결책은 일부 데이터 주석 또는 사용자 정의 속성을 사용하는 것입니다.
public class MyViewModel
{
public double MyCurrencyValue { get; set; }
}
바람직한 해결책은
public class MyViewModel
{
[CurrencyAttribute]
public double MyCurrencyValue { get; set; }
}
다음은 MVC 1.0 바인딩 모델에 대한 내 솔루션입니다 ... 이런 일이 될 것입니다.
public class MyCustomModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
object result = null;
ValueProviderResult valueResult;
bindingContext.ValueProvider.TryGetValue(bindingContext.ModelName, out valueResult);
bindingContext.ModelState.SetModelValue(bindingContext.ModelName, valueResult);
if (bindingContext.ModelType == typeof(double))
{
string modelName = bindingContext.ModelName;
string attemptedValue = bindingContext.ValueProvider[modelName].AttemptedValue;
string wantedSeperator = NumberFormatInfo.CurrentInfo.NumberDecimalSeparator;
string alternateSeperator = (wantedSeperator == "," ? "." : ",");
try
{
result = double.Parse(attemptedValue, NumberStyles.Any);
}
catch (FormatException e)
{
bindingContext.ModelState.AddModelError(modelName, e);
}
}
else
{
result = base.BindModel(controllerContext, bindingContext);
}
return result;
}
}
MyViewModel 목록을 다루는 경우 동작에 대한 ModelBinder가 변경됩니까? public ActionResult 인덱스 (ModelBinder (typeof (CurrencyBinder))] IList 모델 –
David
내 업데이트를 참조하십시오. –