首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EditorFor忽略tabindex。如何设置tabindex?

EditorFor忽略tabindex。如何设置tabindex?
EN

Stack Overflow用户
提问于 2011-02-17 19:30:30
回答 2查看 13.6K关注 0票数 5

The索引的使用似乎只适用于Textboxfor这样的htmlhelper,而不适用于EditorFor

例如:

代码语言:javascript
复制
<%: Html.TextBoxFor(model => Model.MyItem, new { @tabindex = "3" })%>

生成tabindex值。

但是,如果您使用;

代码语言:javascript
复制
<%: Html.EditorFor(model => Model.MyItem, new { @tabindex = "3" })%>

然后,结果是控件按预期创建,但缺少tabindex。

所以......如何为给定的EditorFor控件设置to索引?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-18 22:47:42

我遇到的主要问题是,我需要创建一个EditorFor类型的机制,以便像货币一样格式化小数(我们的系统有多个货币,所以"C“不合适),让制表符索引工作,并允许系统维护标准验证。

我已经通过以下方法实现了这一点。通过创建我自己的自定义编辑器控件。

在项目的Views/Shared/EditorTemplates目录中创建一个文件(我的文件名为decimal.ascx)。

代码语言:javascript
复制
 <%@ 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方法中使用;

代码语言:javascript
复制
<%: Html.TextBox("", Model.ToString("#.00"), new { @tabindex = intTabindex }) %>

模板。

我的调用代码现在是;

代码语言:javascript
复制
<%: Html.EditorFor(model => Model.MyItem, new { tabindex = 5 })%>

结果是页面上的以下代码。

代码语言:javascript
复制
<input id="Model_MyItem" name="Model.MyItem" tabindex="5" type="text" value="12.33" />

这正是我所要求的。

虽然这只适用于我的特定情况,但我鼓励任何希望解决此问题的人首先尝试为任务自定义控件,因为这可能会为您节省大量时间。

当然,如果可以在代码中创建所需的特定类型的控件,并围绕该控件调整结果。

例如,我们可以简单地在调用中添加另一个项目来确定文本格式。

代码语言:javascript
复制
new {tabindex = 12, numberformat=2}

然后,只需为所有格式创建一个处理程序。

票数 3
EN

Stack Overflow用户

发布于 2011-02-18 03:26:20

因为EditorFor只是DataType的模板,所以它只需要一个数据类型作为它的模型。我猜有几种方法可以做到这一点。您可以将tabindex添加到一个匿名对象中,该对象将被合并到EditorTemplate的ViewData中,如下所示。

视图中的代码:

代码语言:javascript
复制
Html.EditorFor(m => m.Username, "test", new { tabindex = 3, style = "width: 400px;" })

ViewData的EditorForModel模板检查:

代码语言:javascript
复制
<%: Html.TextBoxFor(m => m.Username, ViewData)%>

这将呈现一个文本输入,其中tabindex为3,宽度为“style=:400px;

祝你编码愉快。

编辑:这就是我的测试页面中的标记:

代码语言:javascript
复制
<%: Html.EditorFor(m => m.DollarsAmount, "NullableDecimal", new { tabindex = 99 }) %>

我告诉EditorFor模板选择我创建的"NullableDecimal“EditorTemplate。(您可以在模型内部的属性上放置一个UiHint属性,以告诉它要使用哪个editortemplate )

位于~/ EditorTemplate /Shared/EditorTemplates中的"NullableDecimal“模板:

代码语言:javascript
复制
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<decimal?>" %>

<%: Html.TextBox(string.Empty, (Model.HasValue ? Model.Value.ToString("#.00") : null), ViewData) %>

关于我的实现,更具可扩展性的是,我通过匿名对象传递的额外ViewData被合并到ViewData字典中,供EditorTemplate使用。因此,如果您没有向EditorTemplate传递任何ViewData,那么它将不会像您的实现所做的那样将您的文本输入tabindex呈现为0。另外,您的实现将只考虑tabindexes,而不考虑任何其他输入属性。即最大长度或样式

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5028352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档