2010-12-16 52 views
0

我有一個格式化的字符串變量傳遞給ViewData變量。 我的控制器基本上是這樣的:如何將貨幣格式化字符串從控制器傳遞到視圖?

if(ModelState.IsValid) 
{ 
    string total = "$2.00"; 
    ViewData["totalSales"] = total; 
    return View(); 
} 

我有一個HTML幫助功能,在我看來是這樣的:

<%: Html.Label(ViewData["totalSales"].Tostring()) %> 

但是asp.net的MVC發動機產生這樣的:

<label for="$2_00">00</label> 

我只是想通過錢的價值觀和顯示它。 看來小數點正在打破這個值。然而,這必須有一個解決辦法。 我在這裏做一個noob錯誤?


嗯,我能夠通過這樣做是爲了繞過這個:

<p><%: ViewData["totalSales"].ToString() %> </p> 

但是這並不能解釋爲什麼在字符串中的小數導致數據丟失。 任何想法?

+0

我只想指出,我想弄清楚爲什麼一個小數導致這個突破。 如果變量total被設置爲等於沒有小數的東西,這種技術可以正常工作。 – BentOnCoding 2010-12-16 20:59:59

+0

@Robotshushi:你有沒有找到解決方案?如果是的話,請分享...謝謝..我也有同樣的問題... – 2011-03-14 06:39:36

+0

Html.Label有一個特殊的小數的錯誤。不要用它來顯示那樣的文字。我相信我最終使用了一個帶有代碼塊的div。這應該工作= D – BentOnCoding 2011-03-14 15:23:03

回答

0

Use String.Format() with currency

你的錯誤是把框架會自動當轉換成HTML屬性時,轉義/轉換特殊字符(例如「。」)。這是設計。

此外,爲什麼你通過ViewData傳遞硬編碼的字符串?這是從你的模型計算出來的嗎?您可能不是using Label correctly

1

通過您的總變量爲十進制:

decimal total = 2.0; 
ViewData["totalSales"] = total; 
return View(); 

那麼在你看來,渲染這樣的標籤:

<%: Html.Label(string.Format("{0:C2}", ViewData["totalSales"])) %> 
+0

這仍然會導致小數點前的所有內容消失。 – BentOnCoding 2010-12-16 20:45:01

+0

嗯,它實際上聽起來像你想要一個文本框,而不是一個標籤。你最好跳過Html幫手。改爲:<%:Html.Textbox(「totalSales」,string.Format(「{0:C2}」,ViewData [「totalSales」])%> – 2010-12-16 20:50:11

+0

尼斯快速嘗試,但用法不正確http://weblogs.asp.net/scottgu/archive/2010/01/10/asp-net-mvc-2-strongly-typed-html-helpers.aspx切換到<% :Html.Label(「Total Sales」,string.Format(「{0:C2}」,ViewData [「totalSales」]))%> – 2010-12-16 20:51:02