El uso de tabindex parece que sólo funciona para htmlhelpers como Textboxfor y no EditorFor

Por ejemplo;

<%: Html.TextBoxFor(model => Model.MyItem, new { @tabindex = "3" })%>

Produce un valor de tabindex.

Sin embargo, si usted usa;

<%: Html.EditorFor(model => Model.MyItem, new { @tabindex = "3" })%>

A continuación, el resultado es que se crea el control como se esperaba, pero el tabindex falta.

Así…… ¿Cómo es posible establecer el tabindex para un determinado EditorFor de control?

parece un error para mí

OriginalEl autor RobLeather | 2011-02-17

2 Comentarios

  1. 3

    El principal problema que tenía es que necesitaba para crear un EditorFor tipo de mecanismo para dar formato decimal como una moneda (nuestro sistema tiene múltiples monedas, por lo que «C» no habría sido apropiado), obtener un índice de fichas de trabajo Y permitir que el sistema para mantener el estándar de validación.

    Me las he arreglado para conseguir que el uso de la siguiente. Al crear mi propio editor personalizado de control.

    Crear un archivo (el mío se llama decimal.ascx) dentro de los Views/Shared/EditorTemplates directorio de tu proyecto.

     <%@ 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 })%>

    Esencialmente, este código sólo reemplaza lo que normalmente se presentan en una «decimal» EditorFor método con el;

    <%: Html.TextBox("", Model.ToString("#.00"), new { @tabindex = intTabindex }) %>

    plantilla.

    Mi código de llamada ahora lee;

    <%: Html.EditorFor(model => Model.MyItem, new { tabindex = 5 })%>

    El resultado es el siguiente código en la página.

    <input id="Model_MyItem" name="Model.MyItem" tabindex="5" type="text" value="12.33" />

    Que es exactamente lo que necesita.

    Mientras que esto sólo es cierto para mi caso en particular, me gustaría animar a aquellos que buscan solucionar este problema para intentar un control personalizado de primera para la tarea, como es posible ahorrar una cantidad considerable de tiempo.

    Si sería posible en el código para crear un tipo específico de control necesarios y ajustar los resultados en torno a eso.

    Por ejemplo, podríamos simple de agregar otro elemento de la llamada para determinar el formato de texto.

    new {tabindex = 12, numberformat=2}

    A continuación, simplemente crear un controlador para todos los formatos.

    OriginalEl autor RobLeather

  2. 1

    Desde el EditorFor es solo una plantilla para un Tipo de datos está esperando sólo un tipo de datos como Modelo. Hay un par de maneras de ir sobre esto estoy adivinando. Usted podría agregar el tabindex a un objeto anónimo que se fusionarán en el ViewData para la EditorTemplate como así.

    Código en la Vista:

    Html.EditorFor(m => m.Username, "test", new { tabindex = 3, style = "width: 400px;" })

    EditorForModel Plantilla de Verificación para ViewData:

    <%: Html.TextBoxFor(m => m.Username, ViewData)%>

    Esto se debe procesar una entrada de texto con un tabindex de 3 y style=»width: 400px;»

    Feliz codificación.

    Editado:
    Aquí es exactamente el marcado que tengo dentro de mi página de prueba:

    <%: Html.EditorFor(m => m.DollarsAmount, "NullableDecimal", new { tabindex = 99 }) %>

    Yo estoy diciendo la EditorFor plantilla para seleccionar el «NullableDecimal» EditorTemplate que he creado. (Usted puede colocar una UiHint atributo de la propiedad en el interior de la modelo también para saber lo editortemplate a utilizar)

    «NullableDecimal» EditorTemplate encuentra en ~/Views/Shared/EditorTemplates:

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<decimal?>" %>
    
    <%: Html.TextBox(string.Empty, (Model.HasValue ? Model.Value.ToString("#.00") : null), ViewData) %>

    Lo que es más extensible acerca de mi aplicación es el extra ViewData que me pase a través de mi objeto anónimo se combinan en el diccionario ViewData para ser utilizado por el EditorTemplate. Así que si no pasa ninguna ViewData en el EditorTemplate entonces no representar el texto de las entradas tabindex a 0 como su aplicación en la actualidad va a hacer. Además de su aplicación solo cuenta para tabindexes y no por otros atributos de entrada. es decir, maxlength o estilo

    Lo siento, tal vez hay algo mal en mi MVC instalación. Pero mientras que «debe» representar OK, no. El uso de cualquiera de los tabindex o @tabindex o =»3″ o =3; no tengo un tabindex prestados con el control. ¿De verificación para ver si esto funciona antes de enviar la respuesta?
    Acabo de crear una totalmente nueva aplicación para poner a prueba mi teoría y en la instalación de, al menos, no puedo agregar tabindex a un EditorFor de control. Por favor, puedes crear un nuevo MVC 2 aplicación y simplemente editar la página de inicio de sesión, por favor confirmar que si se agregan nuevos {tabindex = 3} y cambiado el TextBoxfor a EditorFor que tabindex aparece en el código fuente de la página. Muchas gracias de antemano.
    Sí, yo hice la prueba con este código dentro de un Asp.net proyecto Mvc 2. El objeto anónimo sólo contendrá los atributos de los elementos que va a ser utilizado para suministrar el método que acepta un IDictionary<string, object> atributos html en el código Html.TextBoxFor
    No estoy seguro de por qué el tabindex no vienen a través de ti porque he probado esto en Asp.net Mvc 2 y 3 con mi aplicación para el EditorFor y ha funcionado. Estoy seguro de que usted sabe que usted puede configurar la plantilla para buscar en el modelo de propiedad con el UiHint atributo o pasando el templatename con el EditorFor llamada en su origen. La mía es una más extenso, ya que se va a fusionar todos los atributos adicionales que desee para que la representación de la caja de texto.
    +1, Sabiendo que este es un muy viejo el post, pensé que iba a añadir que @Html.EditorFor(model => model.text, new {tabindex = "1" }) obras en MVC4. Parece que fijo que esto funcione como se espera.

    OriginalEl autor JustinMichaels

Dejar respuesta

Please enter your comment!
Please enter your name here