Основная проблема, с которой я столкнулся, заключалась в том, что мне нужно было создать механизм типа EditorFor, чтобы отформатировать десятичное число как валюту (наша система имеет несколько валют, поэтому «C» было бы неуместно), чтобы работал индекс табуляции И разрешить системе поддерживать стандартную валидацию.
Мне удалось добиться этого, используя следующее. Создавая свой собственный редактор управления.
Создайте файл (мой называется decimal.ascx) в каталоге Views / Shared / EditorTemplates вашего проекта.
<%@ 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 })%>
По сути, этот код просто переопределяет то, что обычно представляется в "десятичном" методе 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}
Затем просто создайте обработчик для всех форматов.