我有一个类似的案例,但它不是带有自动完成功能的组合框,所有脚本都是脚本文件夹,引用 mvc 视图中的脚本文件。
我的 MVC 上有几个自动完成功能,我添加了一个名为它AutoCompleteController
的控制器(返回 Json 数据)并在布局页面上添加了 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
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)
我在博客上详细介绍过,如果您觉得有帮助,我可以放一个链接
对于第二个问题,我将按照您的建议获取每个模型中的数据并在我的自动完成控制器中调用它,以便为自动完成模板(或部分视图)提供所需的数据