2010-12-16 55 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