2015-11-06 29 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: '£' 
}); 

我希望這個省對他人有用。