私が抱えていた主な問題は、小数を通貨のようにフォーマットするためにEditorForタイプのメカニズムを作成する必要があることです(システムには複数の通貨があるため、「C」は適切ではありませんでした)。標準検証を維持するためのシステム。
私は以下を使用してそれを達成することができました。独自のカスタムエディタコントロールを作成する。
プロジェクトのViews/Shared / EditorTemplatesディレクトリ内にファイル(私のものはdecimal.ascxと呼ばれます)を作成します。
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<decimal?>" %>
<% int intTabindex = 0;
decimal myVal = 0;
string strModelValue = "";
if (Model != null)
{
myVal = (decimal)Model;
strModelValue = myVal.ToString("#.00");
}
else
strModelValue = "";
if (ViewData["tabindex"] != null)
{
intTabindex = (int)ViewData["tabindex"];
}
%>
<%: Html.TextBox("", strModelValue, new { @tabindex = intTabindex })%>
基本的に、このコードは、「10進数」のEditorForメソッドに通常表示されるものを;でオーバーライドするだけです。
<%: Html.TextBox("", Model.ToString("#.00"), new { @tabindex = intTabindex }) %>
レンプレート。
私の発信コードは次のようになります。
<%: Html.EditorFor(model => Model.MyItem, new { tabindex = 5 })%>
結果は、ページ上の次のコードです。
<input id="Model_MyItem" name="Model.MyItem" tabindex="5" type="text" value="12.33" />
それはまさに私が必要としたものです。
これは私の特定の状況にのみ当てはまりますが、この問題を解決しようとしている人は、かなりの時間を節約できる可能性があるため、最初にタスクのカスタムコントロールを試すことをお勧めします。
もちろん、コードで必要な特定のタイプのコントロールを作成し、その周りの結果を調整することが可能である場合。
例えば; 呼び出しに別の項目を追加するだけで、テキスト形式を決定できます。
new {tabindex = 12, numberformat=2}
次に、すべての形式のハンドラーを作成するだけです。