使用selectize multiselect将值传递给数据库

时间:2017-11-08 03:13:04

标签: javascript c# twitter-bootstrap selectize.js

我有一个“添加员工”模式,带有多选择选择“部门”下拉列表。单击按钮时,将运行ajax调用以调用相应的控制器并将值传递给数据库。我可以将所有内容从“部门”下拉列表中移除。

我试过了:

$.ajax({
...
data: { ..., Department: $("#cmbAddDepartment").val(), .... }
})


$.ajax({
...
data: { ...., Department: $("#cmbAddDepartment").getValue(), ... }
})

var selectize = $('#cmbAddDepartment').get(0).selectize;
var cmbAddDepartment=selectize.getValue();
$.ajax({
...
data: { ... , Department: cmbAddDepartment, ... }
})

有趣的是,所有这些都在alert()内部工作,但不在ajax数据中。

我正在使用: Bootstrap 4 alpha 6, JQuery 3.2.1, 独立选择0.12.4

修改 只是一个fyi,我所有的其他组合框都是单选(仍然是选择),$("#cmbAddSomething")。val()`适用于它们。

编辑2:这是控制器和(视图)模型

Viewmodel - vmEmpCreate.cs

public class vmEmpCreate
{
    public vmEmpCreate()
    {
        //constructor
    }

    //combo
    public string Company { get; set; }
    public string Site { get; set; }
    public string[] Department { get; set; } //can be multiple
    public string ProductionLine { get; set; }
    public IEnumerable<SelectListItem> AddCompany { get; set; }
    public IEnumerable<SelectListItem> AddSite { get; set; }
    public IEnumerable<SelectListItem> AddDepartment { get; set; }
    public IEnumerable<SelectListItem> AddProductionLine { get; set; }

}

public class MyListSelectForAdd
{
    public string Key { get; set; }
    public string Display { get; set; }
}

Controller - Controller.cs

[HttpPost]
    public ActionResult AddEmployee(vmEmpCreate vmc)
    {
        if (ModelState.IsValid)
        {
            modEmployee addemp = new modEmployee();

            addemp.Company = vmc.Company;
            addemp.Site = vmc.Site;
            addemp.Department = vmc.Department;
            ...
            addemp.Remarks = vmc.Remarks;

            conn = new SqlConnection(someConnectionString);
            conn.Open();
            comm = new SqlCommand("insert into someTable (company, site, department, ..., remarks) values ('"
                + addemp.Company + "' , '"
                + addemp.Site + "' , '"
                + addemp.Department + "' , '"
                ...
                + addemp.Remarks + "')", conn);
            comm.ExecuteNonQuery();
            conn.Close();
        }

        return PartialView();
    }

编辑3:根据建议,我使用chrome检查员检查了我的程序,看是否有任何错误,但都没有出现。

2 个答案:

答案 0 :(得分:0)

我对选择不是很熟悉,但是为了发送你需要将它存储在一个对象(也就是关联数组)中的信息集:

var selectize = $('#cmbAddDepartment').get(0).selectize;
var cmbAddDepartment=selectize.getValue();

$.ajax({
    ...
    data: {
        ... , 
        Department: cmbAddDepartment, 
        ...
    }
});

您可以根据需要传输尽可能多的数据。因此,如果您的所有方法都有效,那么请使用最适合您的方法,确保数据包含在括号中。

更多关于JavaScript Objects

答案 1 :(得分:0)

我能够通过将多选下拉列表选定值存储到HiddenFor,然后将该值传递给我的&#34;部门&#34;来解决此问题。 ajax电话中的属性。我也改变了我的视图模式&#34; Department&#34;从数组到字符串的属性。

(查看)型号:

public string Department;

查看:

@Html.HiddenFor(m => m.Department, new { @id = "hdnDepartment" })

$('#btnAddEmployee').click(function (e) {
    e.preventDefault();
    var selectize = $('#cmbAddDepartment').get(0).selectize;
    var cmbAddDepartment = selectize.getValue();
    $("#hdnDepartment").val(cmbAddDepartment);
    $.ajax({
        ..
        data: { ..., Department: $("#hdnDepartment").val(), ... }, // optional data
        ...
    });
});

非常便宜的解决方案,但它完成了工作。 感谢大家的帮助!