2015-11-06 82 views
1

Bootstrap,HTML5或jQuery是否可以在输入字段中使用货币前缀作为显示元素,而不是实际输入值的一部分?C#MVC TextBoxFor货币前缀

比如我想在金额字段显示£550.00,但数据为550.00

我一直在使用w2ui尝试,jQuery的赔率格式和jQuery maskMoney,所有3基本上做同样的工作,他们确实可以前缀或后缀,但它们实际上并未在输入中存储值,所以发布数据返回空值。

Model.cs

[DisplayFormat(DataFormatString = "{0:F2}", ApplyFormatInEditMode = true)] 
public double Amount { get; set; } 

HTML

<div class="col-sm-3"> 
    <div class="input-group"> 
     <span class="input-group-addon">Amount</span> 
     @Html.TextBoxFor(m => m.Amount, new { @class = "form-control", @Value = @ViewBag.Amount, placeholder = "Amount", @Id = "Amount" }) 
    </div> 
</div> 

// Dynamically setting value of field 
$('#Amount').val(data.Amount); 

// w2ui example 
$('#Amount').val(data.Amount).w2field('money', { moneySymbol: '£' }); 

// jQuery Price Format example 
$('#Amount').val(data.Amount).priceFormat({ 
    prefix: '£' 
}); 

我知道我可以使用另一个字段来存储的数值,但我有相当多的领域,我需要显示它们最初是动态填充的,但可以被用户覆盖。所以复制字段,一个用于显示输入,一个隐藏用于存储输入的数据,似乎过度杀死。

任何援助将不胜感激:-)

回答

0

我建议,跨度包装您的输入:

<span class="currency">£ @Html.TextBoxFor()</span> 

和修改与CSS,使其很好地格式化自己。如this

或者只是添加它作为一个标签:

<label for="currencyInput">Amount in £</label> 

否则,你会被卡住试图删除/添加到处前缀。保持您的输入为实际值。

+0

感谢您的建议,我已经实施了一个解决此问题的ModelBinder。 – iggyweb

0

问题不在于任何jQuery库,而是表单发布字符串的事实,而模型期望有一个double。

所以我实现了一个ModelBinder来允许包含'英镑'英镑符号的字符串数据和转换为双精度的文章。

MyModelBinder.cs

namespace WebApplication1.Models 
{ 
    public class MyModelBinder : DefaultModelBinder 
    { 
     protected override object GetPropertyValue(ControllerContext controllerContext, ModelBindingContext bindingContext, System.ComponentModel.PropertyDescriptor propertyDescriptor, IModelBinder propertyBinder) 
     { 
      if (propertyDescriptor.ComponentType == typeof(MyModel)) 
      { 
       if (propertyDescriptor.Name == "Amount") 
       { 
        var obj = bindingContext.ValueProvider.GetValue("Amount"); 

        return Convert.ToDouble(obj.AttemptedValue.Replace("£", "")); 
       } 
      } 

      return base.GetPropertyValue(controllerContext, bindingContext, propertyDescriptor, propertyBinder); 
     } 
    } 
} 

HomeController.cs

[HttpPost] 
public ActionResult Index([ModelBinder(typeof(MyModelBinder))]MyModel model) 

HTML

$('#Amount').val(data.Amount).priceFormat({ 
    prefix: '£' 
}); 

我希望这个省对他人有用。