2017-06-19 43 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> 

我沒有在我的例子中進行任何驗證,但驗證理想情況下也應該到位。