2012-03-19 53 views
1

我在我的模型以下字段:ASP.Net MVC十進制自定義編輯模板 - 數據不保存

public Decimal AnnualSalary { get; set; } 

顯示在我的觀點:

@Html.EditorFor(model => model.SelectedPerson.AnnualSalary) 

這使我的數據格式有2位小數。我還想要一個逗號分隔符。所以我在Shared |中創建了一個名爲Decimal.cshtml的文件包含以下編輯模板文件夾:

@model Decimal 
@Html.TextBox("", Model.ToString("#,##0.00")) 

這給了我,我想在編輯器中現有的數據顯示。但是,當我去保存修改後的數據失敗。如果我刪除了十進制編輯器模板,那麼數據可以很好保存。

我還注意到,沒有新的編輯器模板,如果我在此文本框中輸入逗號,我不會收到客戶端驗證錯誤,但是我的數據仍未保存。

這就好像客戶端驗證非常樂意接受千位分隔符,但是當EF代碼第一次嘗試保存數據時服務器端的東西不像千位分隔符。

這似乎是一個相當普遍的要求,但我努力在任何地方找到明確的答案。

回答

0

感謝上面的Michal B.提供的鏈接,我最終找到了this solution provided by Phil Haack的鏈接。

我嘗試了許多其他解決方案中提到的我遵循的鏈接,但這是迄今爲止我找到的最全面和最通用的解決方案。

1

我會建議你製作一個SelectedPersonViewModel,其中AnnualSalary是一個字符串,並將RegexAttribute放在它的正上方,並使用正確的正則表達式進行驗證。

您也可以在內部分析所提供的字符串,並將其保存回成十進制變量,然後到你的模型(在後門柱的動作)

編輯:可能是像在回答這個問題描述: Decimal values with thousand separator in Asp.Net MVC

+0

爲什麼要更改字符串中的AnnualSalary並在動作中解析它,因爲Decimal ...驗證仍然有效,並且不需要將字符串解析爲十進制....? – 2012-03-19 12:13:17

+0

它將允許您以任何您接受的形式(正則表達式)將其發送到服務器,並且也將擺脫現有問題。 – 2012-03-19 12:33:35

+0

感謝您在編輯中提供鏈接。這導致我找到了Phil Haack的一個通用解決方案,詳見下面的答案。我無法真正地將您的答案標記爲正確,但我已將其提升。 – daveywc 2012-03-19 21:38:31

0

該模型期望十進制值對EF有效,同樣的事情。 您可以在隱藏字段中添加小數值,然後顯示帶有用逗號格式化的年薪值的文本框。 然後用jquery,你可以在文本框更新時綁定隱藏字段的值。 這樣你將傳遞你的模型所期望的十進制值。

+0

或者如前面的答案中所述,在視圖模型中用逗號傳遞工資,然後將其轉換爲服務器端。 – 2012-03-19 12:13:42

相關問題