2017-06-19 53 views
0

我想在使用Razor的.cshtml文件中显示12345.67812,345。 是否有任何INLINE解决方案?c#:'Inline'删除小数部分,然后通过cama seperator分开剩余值

当我使用:

<td> @(myValue != null ? myValue.ToString().Substring(myValue.ToString().IndexOf(".") + 1).ToString("#,##0") : '-')</td> 

的错误信息是:

为 'string.ToString(System.IFormatProvider)' 的最佳重载的方法匹配具有一些无效参数

而且为:

<td>@(myValue != null ? myValue.ToString().Format("{0:0}", myValue).ToString("#,##0") : '-')</td> 

错误消息是:

成员“string.Format(string, object)”不能以一个实例引用来访问;

+2

'myValue'的类型是什么? – trashr0x

+0

很长(Int64) – Elnaz

+3

12345.678怎么可能是'长'? – trashr0x

回答

1

对于第二个,就像错误说,你想在一个字符串的一个实例调用.Format(),但.Format()static方法。因此,而不是这样的:

myValue.ToString().Format("{0:0}", myValue).ToString("#,##0") 

你会做这样的事情:

string.Format("{0:0}", myValue).ToString("#,##0") 

注意myValue作为参数传递给static方法传递,你不调用该方法的对象本身。另外,一般来说,当你在任何类型的MVC(或MVVM等)模式下工作并发现自己试图在视图中执行远程复杂的内联代码时,你真正需要的是什么是将计算的属性添加到您的模型,然后绑定到该属性。逻辑属于视图模型,而不是视图本身。

+0

感谢您的替代提示。 – Elnaz

2

基于在OP的评论,它看起来像你通过ViewBag传递double的观点,将其转换为long,然后尝试内嵌格式化?

本质:

  • 转换12345.678Dlong,从而成为12345
  • 格式化1234512,345

这应该工作:

<td>@string.Format("{0:n0}", Convert.ToInt64(ViewBag.MyVal))</td> 

熊请注意,正如@David所指出的那样,您最好将视图模型传递回视图,而不是ViewBag,其中myValue是视图模型本身的属性。你可以在我的回答here中看到如何实现视图模型。

话虽这么说,起码,我将抽象的逻辑走通过创建我自己的类(姑且称之为MyHtmlHelper)延伸HtmlHelper

namespace System.Web.Mvc.Html 
{ 
    public static class MyHtmlHelper 
    { 
     public static string DoubleToFormattedLong(this HtmlHelper html, double myValue) 
     { 
      var longValue = Convert.ToInt64(myValue); 
      return string.Format("{0:n0}", longValue); 
     } 
    } 
} 

用法:

<td>@Html.DoubleToFormattedLong((double)ViewBag.MyVal)</td> 

我没有在我的例子中进行任何验证,但验证理想情况下也应该到位。