我遇到的主要问题是,我需要创建一个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 })%>
从本质上讲,这段代码只是覆盖了通常在“decimal”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}
然后,简单地为所有格式创建一个处理程序。
对我来说好像是一个bug – Alex 2011-10-26 15:25:43