5

tabindexの使用は、Textboxforなどのhtmlhelperでのみ機能し、EditorForでは機能しないようです。

例えば;

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

tabindex値を生成します。

ただし、使用する場合;

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

その結果、コントロールは期待どおりに作成されますが、tabindexがありません。

それで......特定のEditorForコントロールのtabindexを設定するにはどうすればよいですか?

4

2 に答える 2

3

私が抱えていた主な問題は、小数を通貨のようにフォーマットするために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}

次に、すべての形式のハンドラーを作成するだけです。

于 2011-02-18T14:47:41.797 に答える
1

EditorForはDataTypeの単なるテンプレートであるため、Modelとしてのデータ型のみを想定しています。私が推測しているこれについては、いくつかの方法があります。このように、EditorTemplateのViewDataにマージされる匿名オブジェクトにtabindexを追加することもできます。

ビューのコード:

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

EditorForModelテンプレートViewDataのチェック:

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

これにより、tabindexが3でstyle = "width:400px;"のテキスト入力がレンダリングされます。

ハッピーコーディング。

編集済み:これが、テストページ内にあるマークアップです。

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

EditorForテンプレートに、作成した「NullableDecimal」EditorTemplateを選択するように指示しています。(モデル内のプロパティにUiHint属性を配置して、使用するエディターテンプレートを指定することもできます)

〜/ Views / Shared/EditorTemplatesにある"NullableDecimal"EditorTemplate:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<decimal?>" %>

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

私の実装でさらに拡張できるのは、匿名オブジェクトを介して渡した追加のViewDataがViewDataディクショナリにマージされ、EditorTemplateで使用されることです。したがって、ViewDataをEditorTemplateに渡さない場合、実装が現在行うように、テキスト入力tabindexを0にレンダリングしません。さらに、実装ではタブインデックスのみが考慮され、他の入力属性は考慮されません。つまり、maxlengthまたはstyle

于 2011-02-17T19:26:20.303 に答える