【发布时间】:2018-11-02 19:08:17
【问题描述】:
我有一个 MVC Web 表单,其中包含几个文本框字段和两个下拉列表。我正在尝试将下拉列表的文本值传递回我的控制器以在方法中使用。第一个下拉列表用于位置,取决于第二个下拉列表(用于安全组)。
我遇到的唯一问题是 userDn 的变量 (var) 值,我试图传入第一个下拉列表项的位置名称或“文本”值,但它将位置值设置为开关与下拉列表项关联的案例编号:
示例: 姓名:一些 姓氏:姓名 位置:Temecula(开关盒编号 7)
当前返回:“CN=Some Name,OU=7,OU=Some OU,DC=xxx,DC=com
应该返回:“CN=Some Name,OU=Location Name,OU=Some OU,DC=xxx,DC=com
我是否在我的 javascript 中缺少一个函数,该函数将返回我的第一个下拉列表的 Text 值而不是 switch case 编号?任何建议将不胜感激!
public ActionResult AddUserToGroup()
{
var model = new CreateUser();
List<SelectListItem> li = new List<SelectListItem>();
li.Add(new SelectListItem { Text = "Select", Value = "0" });
li.Add(new SelectListItem { Text = "Des Moines", Value = "1" });
li.Add(new SelectListItem { Text = "Fort Worth", Value = "2" });
li.Add(new SelectListItem { Text = "Kansas City", Value = "3" });
li.Add(new SelectListItem { Text = "Marysville", Value = "4" });
li.Add(new SelectListItem { Text = "South Hack", Value = "5" });
li.Add(new SelectListItem { Text = "St Clair", Value = "6" });
li.Add(new SelectListItem { Text = "Temecula", Value = "7" });
ViewData["location"] = li;
return View(model);
}
public JsonResult GetGroups(string id)
{
List<SelectListItem> groups = new List<SelectListItem>();
switch (id)
{
case "1":
groups.Add(new SelectListItem { Text = "Select", Value = "0" });
groups.Add(new SelectListItem { Text = "DM Genetec 24-7 No Act", Value = "1" });
groups.Add(new SelectListItem { Text = "DM Genetec Admin", Value = "2" });
groups.Add(new SelectListItem { Text = "DM Genetec ExtAct-Front", Value = "3" });
groups.Add(new SelectListItem { Text = "DM Genetec ExtAct-Ship", Value = "4" });
groups.Add(new SelectListItem { Text = "DM Genetec ExtAct-Ship", Value = "5" });
groups.Add(new SelectListItem { Text = "DM Genetec Front Door Inner", Value = "6" });
break;
}
return Json(new SelectList(groups, "Value", "Text"));
}
[HttpPost]
public ActionResult AddUserToGroup(CreateUser model)
{
var group = model.Group;
var location = model.Location;
var groupDn = "CN=" + group + ",OU=Groups,DC=xxx,DC=com";
var user = model.FirstName + " " + model.LastName;
var userDn = "CN=" + user + ",OU=" + location + ",OU=Some OU,DC=xxx,DC=com";
try
{
DirectoryEntry entry = new DirectoryEntry("LDAP://" + groupDn);
entry.Properties["member"].Add(userDn);
entry.CommitChanges();
entry.Close();
}
catch(System.DirectoryServices.DirectoryServicesCOMException E)
{
ModelState.AddModelError("", "Exception adding cool user to additional group" + E);
}
var newUserAddition = model.FirstName + " " + model.LastName;
var newGroupAddition = model.Group;
return RedirectToAction("CompletedUserToGroup", "Users", new { someNewUserAddition = newUserAddition, someNewGroupAddition = newGroupAddition });
}
--下面是我认为的javascript--
<script type="text/javascript">
$(document).ready(function () {
$("#Location").change(function () {
$("#Group").empty();
$.ajax({
type: 'POST',
url: '@Url.Action("GetGroups")',
dataType: 'json',
data: { id: $("#Location").val(), Text: $("#Location").val() },
success: function (groups) {
$.each(groups, function (i, group) {
// $("#Group").append('<option value="' + group.Value + '">' + group.Text + '</option>');
$("#Group").append('<option value="' + group.Text + '">' + group.Text + '</option>');
});
},
error: function (ex) {
alert('Failed to retrieve states.' + ex);
}
});
return false;
})
});
【问题讨论】:
-
使
Value与Text相同,而不是数字。 -
我试过了,但它看起来像位置值,它传递了我选择的任何位置项的案例编号(开关)。我不知道这是否有助于更清楚地说明这一点。
-
当表单被提交时,它会发送选择的选项值(如果存在)。将值更改为与文本相同,它将向您发送文本。
new SelectListItem { Text = "DM Genetec ExtAct-Front", Value = "DM Genetec ExtAct-Front" }
标签: javascript c# asp.net-mvc cascadingdropdown