2017-11-08 12 views
2

私は、複数選択選択「部門」ドロップダウンを持つ「従業員の追加」モーダルを持っています。ボタンをクリックすると、Ajaxコールが実行され、それぞれのコントローラを呼び出して値をデータベースに渡します。私は "Department"のドロップダウンを除いてすべてを渡すことができます。select multiselectを使用してデータベースに値を渡します

私が試してみました:

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


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

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

をおかしい事は、Ajaxのデータ内部alert()ではなく、内部のすべてのそれらの作品です。

私が使用しています: ブートストラップ4アルファ6、 jQueryの3.2.1、 スタンドアロンSelectize 0.12.4

EDIT: ちょうどFYI、すべて私の他のコンボボックスが単一選択されている(まだselectizeを)、$("#cmbAddSomething").val() `が動作します。

EDIT 2:ここコントローラと(図)であるモデル

ビューモデル - 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.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(); 
    } 

EDIT 3:提案通り、私はエラーを見るためにクロムインスペクタで私のプログラムをチェックしましたが、カムはありませんeアップ。

答えて

0

もっと私はHiddenForに複数選択ドロップダウン選択された値を格納した後、AJAX呼び出しに私の「部門」プロパティにその値を渡すことで、この問題の回避策を作成することができました。また、ビューモデル "Department"のプロパティを配列から文字列に変更しました。

(ビュー)モデル:

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 
     ... 
    }); 
}); 

かなり安いソリューションが、それは仕事を取得します。 誰もが助けてくれてありがとう!

0

私はselectize非常に精通していないですが、情報のセットを送信するために、あなたがオブジェクトに保管する必要があります(。別名連想配列):

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

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

あなたは限り多くのデータを渡すことができますあなたはその必要があります。したがって、すべてのメソッドが機能している場合は、データが括弧で囲まれていることを確認して、最良の方法を使用してください。 JavaScript Objects

+0

oh!はい、私はすでにしました。それを質問に含めるのを忘れてしまった。申し訳ありませんが、今編集します。ありがとうございました。 –

+0

よろしいですか。要求が送信されていることをコンソールにチェックしましたか?また、リクエストを受け取ったサーバーサイドコードの一部を表示できますか? – Shawn31313

+0

はい、他の値はデータベースに保存されます。私のコードがコントローラに入ると、model.Departmentは常にnullです。申し訳ありませんが、サーバーサイドコードが意味することを明確にすることはできますか? –

関連する問題