2017-03-09 1 views
0

JQuery를 사용하여 컨트롤러에 데이터를 보내고 있지만 컨트롤러가 데이터를 수신하지 않습니다.ajax 호출을 통해 여러 테이블의 데이터를 보내는 방법은 무엇입니까?

두 테이블의 데이터를 게시하려면 필드가 동적으로 만들어지고 일부는 html에 있습니다. 여기

내 코드의 샘플입니다 :

{   
    coursesarray.push($("#coursename").val());   
    for (var i = 1; i < counter; i++)  
    {    
     var courses = $('#coursename' + i).val();   
     coursesarray.push(courses);   
    } 
    obj.tbl_course = coursesarray;  
    obj.Name = Name; 

    $.ajax(
     { 
     type: "POST", 
     datatype: "json", 
     contenttype: "application/json/", 
     url: "/Demo/SaveData/", 
     data: JSON.stringify(obj), 
     success: savesuccess, 
     error:saveerror 
     });   
}); 

컨트롤러 방법

public JsonResult SaveData(tbl_name tblobj) 
{ 
    db.tbl_name.Add(tblobj); 
    db.SaveChanges(); 
    foreach (var a in tblobj.tbl_course) 
    { 
     db.tbl_course.Add(a); 
     db.SaveChanges(); 
    } 
    return Json("success", JsonRequestBehavior.AllowGet); 
} 

그리고 모델은

public partial class tbl_name 
{ 
    public int PkId { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<tbl_course> tbl_course { get; set; } 
} 

이고 두 번째 모델은

public partial class tbl_course 
{ 
    public int Pkid { get; set; } 
    public Nullable<int> FkId { get; set; } 
    public string Coursename { get; set; } 
    public string CourseTeacher { get; set; } 
    public virtual tbl_name tbl_name { get; set; } 
} 
,369입니다
+0

게시 할 컨트롤러 메서드와 바인딩 할 모델을 표시해야합니다. –

+0

나는 모든 것을 올려 놓았다. –

+0

try data : {JSON.stringify (obj)}, – Ritz

답변

0

나는 내 수업

public class Customer 
{ 
    public string id { get; set; } 
    public string Name { get; set; } 
    public string Address { get; set; } 

    public List<Shop> Shops { get; set; } 
    public override string ToString() 
    { 
     return JsonConvert.SerializeObject(this); 
    } 
} 

이 그리고 내 Shop 클래스는이

public class Shop 
{ 
    public string Name { get; set; } 
    public string Address { get; set; } 
    public string AddressContd { get; set; } 
    public ShopContacts ShopContacts { get; set; } 
} 

처럼 그리고 내 ShopContacts 클래스는 단순한 클래스를 포함 FNAME, LNAME 등의 속성과 같다.

내 컨트롤러 방법이

[HttpPost] 
public IActionResult Post(Customer Data) 
{ 
     ... 
} 

그리고 내 jQuery를/아약스는 다음과 같이처럼

var contacts = { 
       FirstName: $("#firstName").val(), 
       LastName: $("#lastName").val(), 
       Email: $("#email").val(), 
      }; 
var ShopsData = [{ 
       Name: $("#ptLocAddr").val(), 
       Address: $("#ptLocAddr").val(), 
       AddressContd: $("#ptLocAddrContd").val(), 
       Country: $("#ptLocCountry").val(), 
       State: $("#ptLocState").val(), 
       City: $("#ptLocCity").val(), 
       Zip: $("#zip").val(), 
       FacilityType: $("#ptFacility").val(), 
       Radius: $("#ptShopRadius").val(), 
       ShopContacts: contacts 
      }] 
var Data = { 
       id: 0, 
       Shops: ShopsData 
      } 

$.ajax({ 
    "url": "http://localhost:63025/api/values/", 
    "type": "Post", 
    "data":Data, 
    success: function (d) { 
     console.log(d); 
    } 
}) 

입니다 그리고 예상대로 작동합니다. 귀하의 경우에는 jQuery에서 push() 메소드를 사용하여 값을 추가하고 내가하는 방법을 따르십시오. 여기

var myArray = []; 

당신이 .each를 (할)와 다음과 같은 배열에 값을 밀어 수 있습니다 : 다음

var myData = { 
      RuleID: $('#hidRuleId').val(), 
      ProcessDefnID: $('#hidProcessDefnId').val(), 
      RuleName: $('#txtEditRuleName').val(), 
      Conditions: Conditions, 
      ... 
     } 

그리고 당신의 아약스 방법

단지를 배치

myArray.push(yourForEachData); 

데이터 필드의 myData, 이와 같이

{ 
..., 
data: myData, 
..., 
} 

그게 다야! 그것은 확실히 작동 할 것입니다. 클래스 이름, 변수 이름 및 속성을 요구 사항에 맞게 변경하십시오.

문제가 해결되면 답을 표시하는 것을 잊지 마십시오. 건배 ...

+0

위의 업데이트 된 답변을 확인하십시오. –

관련 문제