【问题标题】:How can I display my detail after choosing in autocomplete textbox using jquery - MVC 5 Razor使用 jquery - MVC 5 Razor 在自动完成文本框中选择后如何显示我的详细信息
【发布时间】:2016-05-26 05:58:57
【问题描述】:

选择员工 ID 后如何显示我的详细信息(全名和部门)。我正在使用 MVC5 和 Razor

在这张图片中显示了我的主要表单

然后这是我的员工 ID(文本框 - 自动完成查找)

我创建了一个简单的 jquery,它在触发或更改员工 ID 时触发

 $(".employeeID").on("click", function () {
   var empid = $(this).val();


   if (empid != undefined)
   {
      //I don't know what to write here
      //but I break point here and it triggered
   }
 });

这里还有文本框员工 ID 的代码

@Html.TextBoxFor(model => model.EmployeeID, new { @class = "form-control employeeID", @placeholder = "Employee's ID", @id = "employeeid", @required = true })

全名和部门

@Html.DisplayFor(model => model.FullName)
@Html.DisplayFor(model => model.Department)

然后在选择员工 id 后,它将在数据库中查找员工及其部门的全名。

我仍然是 MVC 和脚本的业余爱好者 谁能帮我解决这个问题?

提前致谢

更新

            $('#employeeid').autocomplete(
            {
                source: '@Url.Action("EmployeeIDSearch", "Home")'
            }).focus(function () {
                $(this).autocomplete("search", " ")
            });

这是我的自动完成的 jquery。以下是我的员工 ID 的控制器

public ActionResult EmployeeIDSearch(string term)
    {
        // Get Tags from database
        using (var ctx = new DASH_FAEntities())
        {
            var tags = (from e in ctx.Employees
                        select e.EMT_EmployeeID.Trim()).ToList();

            return Json(tags.Where(t => t.ToLower().Contains(term.ToLower().Trim())).OrderBy(x => x),
                       JsonRequestBehavior.AllowGet);
        }
    }

我的员工表包含

  • 员工编号
  • 全名
  • 部门

【问题讨论】:

  • 您应该处理select 事件(假设您使用jquery-ui)。 @Html.DisplayFor() 只是将文本添加到您的视图中(不是 html 元素),而使用 new { @class = "form-control"} 毫无意义——它什么也不做)。您将需要创建可以选择的元素 - 例如<div id="fullname">@Html.DisplayFor(model => model.FullName)</div> 以便他们可以更新。
  • 是的,我正在使用 jquery-ui。我应该在哪一部分使用 select ?注意到我的显示器使用<div></div>
  • 向您展示如何附加插件的脚本,以及获取您想要包含在视图中的详细信息的控制器方法。

标签: c# jquery json razor asp.net-mvc-5


【解决方案1】:

您需要处理 .select 事件并使用 ajax 调用控制器方法,该方法返回您要在 DOM 中更新的详细信息。

首先,您需要将@Html.DisplayFor() 方法输出的文本包装在一个元素中,以便可以选择它

<div id="fullname">@Html.DisplayFor(m => m.FullName)</div>
<div id="department">@Html.DisplayFor(m => m.Department)</div>

然后修改脚本为

var name = $('#fullname);
var department = $('#department);

$('#employeeid').autocomplete({
    source: '@Url.Action("EmployeeIDSearch", "Home")',
    select: function( event, ui ) {
        var ID = ui.item.value;
        $.getJSON('@Url.Action("Details")', { ID: ui.item.value }, function(data) {
            if (data) {
                name.text(data.name);
                name.text(data.department);
            }
        }); 
    }
})

控制器方法是(根据需要调整以适合您的属性名称)

public ActionResult Details(int ID)
{
    Employee employee = db.Employees.Where(e => e.EMT_EmployeeID == ID).FirstOrDefault();
    if (employee == null)
    {
        return Json(null, JsonRequestBehavior.AllowGet);
    }
    else
    {
        var data = new { name = employee.FullName, department = employee.Department };
        return Json(data, JsonRequestBehavior.AllowGet);
    }
}

【讨论】:

  • 控制器似乎运行良好,但我不知道为什么它仍然没有出现。我尝试在控制器详细信息中指出一个断点,并且 ID 有一个值,并且我一步一步地直到return Json(data, JsonRequestBehavior.AllowGet); 详细全名和部门在视图中仍然为空白,即使它有一个值
  • 我明白了。我没有使用name.val(data.name)name.val(data.department),而是使用$('#fullname').html(data.name)$('#department').html(data.department) 找到了这个。非常感谢斯蒂芬。你让工作变得轻松。
猜你喜欢
  • 2016-10-27
  • 2016-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多