ビューを呼び出すときにコントローラーからコントロールにフォーカスを設定できますか?
(一般的なベスト プラクティスは、ページの読み込み時に jQuery を使用してコントロールにフォーカスを設定することだと理解しています。)
ビューを呼び出すときにコントローラーからコントロールにフォーカスを設定できますか?
(一般的なベスト プラクティスは、ページの読み込み時に jQuery を使用してコントロールにフォーカスを設定することだと理解しています。)
コントローラーの仕事 (そのうちの 1 つ) は、正しくレンダリングするのに十分な情報をビューに与えるビュー モデルをセットアップすることです。つまり、コントローラーとビューは疎結合のみにする必要があります。
これを行う1つの方法を次に示します。これは、よりエレガントに行うことができますが、多少分離されています。クライアント側のスクリプトを実行するには引き続き JavaScript が必要ですが、スクリプトはビュー モデルの値に基づいて生成されます。
コントローラ
public ActionResult Foo(){
var model = new MyViewModel();
model.SelectedItem = "FirstName";
return View( model );
}
意見
@model MyViewModel
@Html.TextBoxFor( o => o.FirstName )
@if( Model.SelectedItem != default( string ) ){
<script>$("#@(Model.SelectedItem)").focus();</script>
}
Web 開発について学ばなければならないことの 1 つは、世界中のすべてのテクノロジをサーバー上で使用できるということですが、最終的には、それらのテクノロジは標準 (またはそれに相当するもの) の Html、CSS、および JavaScript を生成する必要があります。
つまり、クライアントで自動的に処理を実行するためにサーバーで実行できる特別な魔法はありません。一部のフレームワークでは、これを行うコードを自動的に生成できますが、最終的には標準の html/css/js として実行する必要があります。
MVC は、標準のプレーンな HTML のみをレンダリングします。Webforms は多くのことを行いますが、最終的に Webforms は標準の HTML も生成する必要があります。これは、読み込み時にフォーカスを設定するページに含まれる javacript を自動生成することによって行われます。
MVC はこれらのことを何もしないので、基本的には同じことを行う必要がありますが、それを作成する必要があります。簡単なjqueryを使用すると比較的簡単です。