دریافت مقدار صفر برای مقادیر اعشاری در کنترلر
سلام. وقت بخیر
من تو view برنامم، یه فیلد دارم که نوعش float هست. وقتی مقدار اعشاری مثلا 2.5 رو بهش میدم و دکمه ذخیره رو میزنم، مقدار این فیلد در کنترلر 0.0 میاد.
چطور میشه رفعش کرد؟
public float Tax { get; set; }
@Html.TextBoxFor(model => model.Tax, new { @class = "form-control text-center", lang = "en" })
اگر مقدار فیلد رو عدد صحیح وارد کنم (مثلا 9) مشکلی نداره اما با اعشار مشکل داره
نقل قول: دریافت مقدار صفر برای مقادیر اعشاری در کنترلر
نقل قول: دریافت مقدار صفر برای مقادیر اعشاری در کنترلر
نقل قول:
نوشته شده توسط
Moien Tajik
با دابل هم دقیقا همین وضعیت رو داره
مشکلش چیه به نظرتون؟
نقل قول: دریافت مقدار صفر برای مقادیر اعشاری در کنترلر
اگر امکانش هست کد کنترلرتون رو قرار بدید .
نقل قول: دریافت مقدار صفر برای مقادیر اعشاری در کنترلر
نقل قول:
نوشته شده توسط
Moien Tajik
اگر امکانش هست کد کنترلرتون رو قرار بدید .
MyModel:
public float Tax { get; set; }
ویو:
@Html.TextBoxFor(model => model.Tax, new { @class = "form-control text-center", lang = "en" })
کنترلر:
[HttpPost]
public ActionResult Create(MyModel entity)
{
RepositoryObject.Insert(entity);
}
تو کنترلر کد خاصی نیست.
نقل قول: دریافت مقدار صفر برای مقادیر اعشاری در کنترلر
نقل قول: دریافت مقدار صفر برای مقادیر اعشاری در کنترلر
نقل قول:
نوشته شده توسط
Moien Tajik
ممنون از توضیحتون
ولی متاسفانه متوجه نشدم چکار باید کنم.
امکانش هست بیشتر راهنماییم کنید؟
نقل قول: دریافت مقدار صفر برای مقادیر اعشاری در کنترلر
از این Model Binder داخل پروژتون استفاده کنید :
public class DecimalModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var valueResult = bindingContext.ValueProvider
.GetValue(bindingContext.ModelName);
var modelState = new ModelState { Value = valueResult };
object actualValue = null;
try {
actualValue = Convert.ToDecimal(valueResult.AttemptedValue, CultureInfo.CurrentCulture);
}
catch (FormatException e) {
modelState.Errors.Add(e);
}
bindingContext.ModelState.Add(bindingContext.Model Name, modelState);
return actualValue;
}
}
و در Global.asax :
ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
bindingContext.ValueProvider.GetValue به طور پیشفرض Integer برمیگردونه و شما با استفاده از این Model Binder اون رو به Decimal تغییر میدید.
این مطلب + کامنت هاش رو به دقت بخونید ، متوجه مشکل میشید : http://stackoverflow.com/a/33711121/6661314
نقل قول: دریافت مقدار صفر برای مقادیر اعشاری در کنترلر
نقل قول:
نوشته شده توسط
Moien Tajik
از این Model Binder داخل پروژتون استفاده کنید :
public class DecimalModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var valueResult = bindingContext.ValueProvider
.GetValue(bindingContext.ModelName);
var modelState = new ModelState { Value = valueResult };
object actualValue = null;
try {
actualValue = Convert.ToDecimal(valueResult.AttemptedValue, CultureInfo.CurrentCulture);
}
catch (FormatException e) {
modelState.Errors.Add(e);
}
bindingContext.ModelState.Add(bindingContext.Model Name, modelState);
return actualValue;
}
}
و در Global.asax :
ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
bindingContext.ValueProvider.GetValue به طور پیشفرض Integer برمیگردونه و شما با استفاده از این Model Binder اون رو به Decimal تغییر میدید.
این مطلب + کامنت هاش رو به دقت بخونید ، متوجه مشکل میشید :
http://stackoverflow.com/a/33711121/6661314
از اینکه با صبر و حوصله جواب میدید ممنونم/
من این کار رو انجام داده بودم. Model Binder ام رو با Model Binder شما عوض کردم اما یاز هم تغییری حاصل نشد
نقل قول: دریافت مقدار صفر برای مقادیر اعشاری در کنترلر
trace کردم
روی کد Convert.ToDecimal(valueResult.AttemptedValue, CultureInfo.CurrentCulture) خطا میده.
valueResult.AttemptedValue مقدار داره اما کل فانکشن خطا میده.
یه سوال دیگه این برای decimal هست. برای float و double چکار کنم؟
نقل قول: دریافت مقدار صفر برای مقادیر اعشاری در کنترلر
احتمالا در کدتون مشکلی هست چون چندجا با این کد دیدم که مشکل رفع شده ، عینا با این جلو برید ( خواندن کامنت ها فراموش نشه ) : http://haacked.com/archive/2011/03/1...decimals.aspx/
نقل قول:
یه سوال دیگه این برای decimal هست. برای float و double چکار کنم؟
جای استفاده از Convert.ToDecimal از Convert.ToDouble و Convert.ToSingle استفاده کنید.
نقل قول: دریافت مقدار صفر برای مقادیر اعشاری در کنترلر
نقل قول:
نوشته شده توسط
Moien Tajik
ممنون با کامنت ها درست شد.
از راهنمایی هاتون تشکر میکنم
نقل قول: دریافت مقدار صفر برای مقادیر اعشاری در کنترلر
نقل قول:
نوشته شده توسط
Moien Tajik
از این Model Binder داخل پروژتون استفاده کنید :
public class DecimalModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var valueResult = bindingContext.ValueProvider
.GetValue(bindingContext.ModelName);
var modelState = new ModelState { Value = valueResult };
object actualValue = null;
try {
actualValue = Convert.ToDecimal(valueResult.AttemptedValue, CultureInfo.CurrentCulture);
}
catch (FormatException e) {
modelState.Errors.Add(e);
}
bindingContext.ModelState.Add(bindingContext.Model Name, modelState);
return actualValue;
}
}
و در Global.asax :
ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
bindingContext.ValueProvider.GetValue به طور پیشفرض Integer برمیگردونه و شما با استفاده از این Model Binder اون رو به Decimal تغییر میدید.
این مطلب + کامنت هاش رو به دقت بخونید ، متوجه مشکل میشید :
http://stackoverflow.com/a/33711121/6661314
برای دوستانی که ممکنه در آینده به این مشکل بخوردن، من مشکل رو با کد بالا و با یه تغییر کوچیک موقتا اصلاح کردم.:
actualValue = Convert.ToDecimal(valueResult.AttemptedValue.Repla ce("/","."), CultureInfo.CurrentCulture);
چون عدد پست شده بصورت 123/45 بود و این خط به خطا میخورد، یه ریپلیس زدم که اصلاح بشه
روش بهتر کسی میدونه اطلاع رسانی کنه.