我对MVC很新,并试图找到自己的方式。我也在用VB编写代码,因为大多数例子都在C#中。但是我已经卖了......然而,我现在完全陷入了这个问题。我已经搜索了几天并尝试了很多变化,我甚至都记不起其中的一半。
这就是我想要完成的事情:我有一个表格来输入员工服务行动(即登机,终止,转移等)。在表单上,用户将输入经理的名字和姓氏。我需要针对AD验证该名称,如果找不到,请返回可能匹配的下拉列表供他们选择。
我正在尝试使用Ajax和部分视图执行此操作并且没有取得好成绩。目前我收到一个错误:
There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'Emp_Mgr_Name'
它还试图在表单最初加载时加载它 - 我不希望它在实际输入表单上的管理器名称之前执行此操作。
以下是我到目前为止的情况 - 我哪里出错,或者我正在努力做不到的事情,是否有人对如何实现这一目标有任何建议?任何帮助将不胜感激!
在我的主视图中,这些是我的脚本引用:
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
这是验证管理器名称并返回列表的脚本(这是在我的控制器中触发并调用操作):
$("#Emp_Mgr_Last_Name").change
(function ()
{
$.getJSON("/EmpInfo/ValidateMgrName/" + $("#Emp_Mgr_First_Name").attr("value") + "/" + $("#Emp_Mgr_Last_Name").attr("value"),
function (data)
{
$("#ValidateMgrName").html(data)
});
});
以下是我的控制器中的代码(strADList
确实包含运行时的名称列表):
<HttpGet()>
Public Function ValidateMgrName(ByVal Emp_Mgr_First_Name As String, ByVal Emp_Mgr_Last_Name As String) As ActionResult
Dim strADList As New List(Of String)
If Request.IsAjaxRequest Then
Dim strADInfo = GetADInfo(Emp_Mgr_First_Name.Trim, Emp_Mgr_Last_Name.Trim)
If strADInfo <> String.Empty Then
Else
strADInfo = GetADList(Emp_Mgr_First_Name.Trim, Emp_Mgr_Last_Name.Trim, strADList)
End If
Return Json(New With {.success = True, .data = strADList, JsonRequestBehavior.AllowGet})
End If
End Function
在我的主视图中,这里是我尝试使用局部视图替换代码的地方:
<div id="ValidateMgrName">@Html.Partial("ValidateMgrName")</div>
这就是我在部分观点中所拥有的:
@Html.DropDownList("Emp_Mgr_Name")