1

2 つのネストされた部分コントロールがあります

ユーザー コントロール 1:

Html.BeginRouteForm
(
   Html.RenderPartial (path of child form)
)

子コントロール:

Html.LabelFor(x=>x.FirstName,"First Name")
Html.TextBoxFor(x=>x.FirstName)
...

問題:

ホームページにこの部分コントロールのインスタンスが 2 つあります。2 番目のインスタンスの [送信] ボタンをクリックすると、AJAX と JQuery を使用してフォームが投稿されます。FirstName には必須の制約があるため、FirstName に対してトリガーされた必須の検証でフォームがレンダリングされます。ここで問題が発生します: ラベル「First Name」をクリックすると、検証がトリガーされた 2 番目のインスタンスではなく、部分フォームの最初のインスタンスの First Name TextBox にカーソルがフォーカスされます。

これに取り組む方法について何か提案はありますか?どうもありがとう!

4

1 に答える 1

2

ChildControl の 2 つのインスタンスが同じ ID 文字列を生成している可能性が高いため、ID の重複の被害者であると推測できます。

ASPNET とは異なり、MVC は ID を「ローカルに」生成するように見えます。言い換えれば、生成された "コントロール" の数を追跡するバックグラウンドはありません。これにより、ASPNET は一意の ID を生成できます。

もしそうなら、それは解決するのに十分簡単な問題です。次のようにして、独自の ID を ChildControl の各インスタンスに追加するだけです。

@Html.TextBox("rel_date", Model.Value.rel_date.ToSiteString(), new { @class = "date-picker", style = "width: 75px;", id = "" })

ここでは、TextBox ヘルパー呼び出しの html 属性パラメーターに空の ID 値を渡すことで、生成しているテキスト ボックスの ID を実際に抑制しています。ページに固有であることがわかっているIDを挿入します。

ところで、ページの生成された html を確認することで、ID の重複について私が正しいかどうかをすぐに確認できます。IE で起動したら、F12 を押します (とにかく IE9 で)。これにより、ページを生成している html を参照できるウィンドウが開きます。これを読んで、2 つのテキスト ボックスの ID 属性が同じかどうかを確認できます。これは、私の理論を裏付けるものです。

幸運を!

于 2012-05-08T14:28:16.340 に答える