2017-11-08 14 views
2

"다중 직원 선택"부서 "드롭 다운이있는"직원 추가 "모달이 있습니다. 버튼 클릭시, Ajax 호출이 실행되어 각각의 컨트롤러를 호출하고 데이터베이스에 값을 전달합니다. 나는 "부서"드롭 다운을 제외한 모든 것을 전달할 수 있습니다.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, ... } 
}) 

재미있는 점은, 모든 일 alert() 내부하지만 아약스 데이터를 내부.

내가 사용하고 있습니다 : 부트 스트랩 4 알파 6, JQuery와 3.2.1, 독립 Selectize를 0.12.4

편집 : 그냥 참고로, 내 모든 다른 콤보는 (여전히 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 : 제안대로, 나는 크롬 검사기로 내 프로그램을 검사하여 오류를 보았지만 아무 것도 보지 못했습니다 위로.

답변

0

더는 내가 HiddenFor에 다중 선택 드롭 다운 선택 값을 저장 한 후 아약스 호출 내 "부서"속성에 그 값을 전달하여이 문제에 대한 해결 방법을 만들 수 있었다. 또한 viewmodel "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

오! 예, 이미 했어요. 그것을 질문에 포함하는 것을 잊어 버렸습니다. 죄송합니다. 지금 수정합니다. 고맙습니다. –

+0

오케이. 요청을 보내고 있는지 콘솔에 확인 했습니까? 그리고 요청을받는 곳의 서버 측 코드를 보여줄 수 있습니까? – Shawn31313

+0

예, 다른 값은 데이터베이스에 저장됩니다. 내 코드가 컨트롤러에 들어 오면 model.Department는 항상 null입니다. 죄송합니다. 서버 측 코드가 의미하는 바를 명확히 할 수 있습니까? –