同様のケースがありましたが、コンボボックスではなく、オートコンプリートがありました。すべてのスクリプトはスクリプトフォルダーになり、mvc ビューのスクリプトファイルを参照します。
MVC にいくつかのオートコンプリートがあり、AutoCompleteController
(Json データを返す) その名前のコントローラーを 1 つ追加し、レイアウト ページに jQuery とカスタム スクリプトを追加して、すべてのページで使用できるようにしました (私のアプリケーションでは、ページの 90% がオートコンプリート)
私のオートコンプリートコントローラーの例
namespace ADM.Ntrasal.Web.UI.Browser.Controllers
{
public class AutoCompleteController : Controller
{
private readonly IRepositories Repositories;
public AutoCompleteController()
{ //Prefare to use Ioc but for simplicity
this.Repositories = new Repositories();
}
//
// GET: /AutoComplete/
public ActionResult EmployeeNames(string term)
{
var count = 10;
var UserProfileRepostery = this.Repositories.Create<UserProfile>();
var result = UserProfileRepostery.GetAll().Where(x =>
x.Employee_Name.ToLower().Contains(term.ToLower()))
.Take(count).Select(x =>
new
{
label = x.Employee_Name,
id = x.UserID
});
return Json(result, JsonRequestBehavior.AllowGet);
}
}
}
AutoCompleteViewModule を 1 つ作成しました
public class AutoCompleteViewModule
{
public AutoCompleteViewModule()
{
//default values
AutocompleteCount = 10;
Type = AutoCompleteTypes.EmployeeNames;
}
public string Id { get; set; }
public string Name { get; set; }
public string Field { get; set; }
public int AutocompleteCount { get; set; }
public AutoCompleteTypes Type { get; set; }
オートコンプリート出力 html を管理するためのエディター テンプレートを追加しました
@model ADM.Ntrasal.UI.Web.Browser.Models.AutoCompleteViewModule
<input type="text" name="AutocompleteTextBox"
data-target='@Model.Field'
data-autocomplete="@Url.Action(@Model.Type.ToString(),
"AutoComplete", new { count = @Model.AutocompleteCount })"
value='@Model.Name' />
@Html.Hidden(@Model.Field)
オートコンプリートに必要なスクリプトを追加したくない場合は、それをオプションのセクションに入れ、オートコンプリートが必要なビューでいつでもスクリプトを参照します。
私は私の見解で以下を使用します:
@Html.EditorFor(x=>@Model.AutocompleteField)
私はこれについて詳細にブログを書きました。役に立つと思われる場合はリンクを貼ることができます
2番目の質問については、あなたが提案したように各モデルのデータを取得し、オートコンプリート コントローラーでそれを呼び出して、オートコンプリート テンプレート (または部分ビュー) に必要なデータを提供します。