UpdateModel 또는 TryUpdateModel에서 $ 1,200.00과 같은 통화 또는 통화 서식이 지정된 값을 청크를 울리지 않고 10 진수로 구문 분석 할 수 있습니까?통화 서식이 지정된 값으로 TryUpdateModel이 필요합니까?
5
A
답변
3
맞춤형 모델 바인더를 사용하십시오.
+0
내가 원했던만큼 단순하지 않거나 우아하지는 않지만 실제로 조정 된 부분이 있으므로 감사드립니다. 나는 바운스 된 바인더를 게시 할 것이다. –
1
이러한 방법 중 하나를 호출하기 전에 값을 앞에서 구문 분석 할 수 있습니까? 그렇다면 다음 방법을 사용하십시오.
var provider = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();
provider.CurrencySymbol = "$";
var x = decimal.Parse(
"$1,200",
NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands,
provider);
2
대답은 자신의 링크가이 작업을 수행하는 기본 날을 제공하기 때문에 프레디 리오스에게 수여하지만, 코드는 고치 일부를 필요했다 :
// http://www.crydust.be/blog/2009/07/30/custom-model-binder-to-avoid-decimal-separator-problems/
public class MoneyParsableModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
object result = null;
// Added support for decimals and nullable types - c.
if (
bindingContext.ModelType == typeof(double)
|| bindingContext.ModelType == typeof(decimal)
|| bindingContext.ModelType == typeof(double?)
|| bindingContext.ModelType == typeof(decimal?)
)
{
string modelName = bindingContext.ModelName;
string attemptedValue = bindingContext.ValueProvider[modelName].AttemptedValue;
// Depending on cultureinfo the NumberDecimalSeparator can be "," or "."
// Both "." and "," should be accepted, but aren't.
string wantedSeperator = NumberFormatInfo.CurrentInfo.NumberDecimalSeparator;
string alternateSeperator = (wantedSeperator == "," ? "." : ",");
if (attemptedValue.IndexOf(wantedSeperator) == -1
&& attemptedValue.IndexOf(alternateSeperator) != -1)
{
attemptedValue = attemptedValue.Replace(alternateSeperator, wantedSeperator);
}
// If SetModelValue is not called it may result in a null-ref exception if the model is resused - c.
bindingContext.ModelState.SetModelValue(modelName, bindingContext.ValueProvider[modelName]);
try
{
// Added support for decimals and nullable types - c.
if (bindingContext.ModelType == typeof(double) || bindingContext.ModelType == typeof(double?))
{
result = double.Parse(attemptedValue, NumberStyles.Any);
}
else
{
result = decimal.Parse(attemptedValue, NumberStyles.Any);
}
}
catch (FormatException e)
{
bindingContext.ModelState.AddModelError(modelName, e);
}
}
else
{
result = base.BindModel(controllerContext, bindingContext);
}
return result;
}
}
을 그것은 꽤 아니지만, 공장.
관련 문제
- 1. 서식이 지정된 표 표시
- 2. 서식이 지정된 문자열을 XAML로 저장하십시오.
- 3. richtextbox에서 서식이 지정된 텍스트 저장
- 4. Python argparse : 미리 서식이 지정된 도움말 텍스트?
- 5. J2ME 캔버스에 서식이 지정된 텍스트 표시
- 6. Eclipse : JSP로 서식이 지정된 JavaScript 코드 단편
- 7. CGI - Perl로 서식이 지정된 전자 메일을 보냅니다.
- 8. DocumentFormat.OpenXML을 사용하여 서식이 지정된 스프레드 시트를 만드시겠습니까?
- 9. PHP로 변환 HTML 서식이 지정된 날짜
- 10. Excel 셀의 서식이 지정된 텍스트에서 태그 제거
- 11. NSDateFormatter : 서식이 지정된 날짜를 단축하는 방법?
- 12. 서식이 지정된 숫자로 된 문자열에서 정수를 가져 오는 중
- 13. 지정된 기간없이 값으로 UIView 애니메이션하기
- 14. TryUpdateModel이 작동하지 않습니다.
- 15. Rails로 서식이 지정된 HTML 양식 입력의 실시간 미리보기
- 16. Windows Messenger 연결 초대 API HTML 서식이 지정된 본문
- 17. WPF 데이터 바인딩을 사용하여 서식이 지정된 여러 줄 텍스트 표시
- 18. .Net 양식에 서식이 지정된 정보를 표시하는 방법은 무엇입니까?
- 19. XSLT 1.0으로 HTML을 통해 서식이 지정된 텍스트를 자릅니다.
- 20. Cocoa : 현재 글꼴에 서식이 지정된 텍스트를 붙여 넣으시겠습니까?
- 21. 선택 가능한 TextBlock 또는 WPF의 서식이 지정된 텍스트가있는 TextBox
- 22. PHP로 서식이 지정된 텍스트를 표시하는 동안 인코딩 문제가 발생했습니다
- 23. TryUpdateModel이 아닌 ModelState.IsValid를 사용해야하는 특별한 경우가 있습니까?
- 24. 통화 종료 후 통화 로그에서 통화 삭제
- 25. UITextField 서식이 작동하지 않습니까?
- 26. 임의 통화 문자열 - 모든 부품을 분리합니까?
- 27. Zend Framework : 지정된 열 값으로 테이블 행을 찾는 방법?
- 28. Magento 복수 통화/복수 통화
- 29. 동적 통화 기호가있는 통화 서식
- 30. String.Format 및 log.DebugFormat 통화
스택을 난처하게 만들었습니까? 그게 그렇게 힘들지는 않은 것 같니? –