EF에 관련된 두 개의 테이블이 있다고 가정합니다.
public partial class Table1
{
public int Id {get; set;}
public int Table2Id {get; set;}
public virtual Table2 Table2 {get; set}
}
public partial class Table2
{
public Table2()
{
Table1 = new HashSet<Table1>
}
public int Id {get; set;}
public string datastring {get; set;}
public virtual Icollection<Table1> Table
}
나는 이것을 분명히 단순화했지만 실제 문제와 충분히 비슷합니다.
일반적으로 단일 테이블 인 경우 jQuery의 양식 제출에서 데이터를 쉽게 추출 할 수 있습니다. 나는 이것을 좋아합니다.
form.serializeArray();
그러나이 경우 실제 테이블의 '하위'테이블에 들어가는 내 양식에서 데이터를 추출하고 싶습니다.
<div class="container">
<form id="MyForm">
<input name="Table1.Table2.dataString" />
<button type="submit">save</button>
</form>
</div>
이 시나리오가 .net MVC에서 지원된다는 느낌이 들지만 '하위'테이블에 속한다는 것을 이해하기 위해 실제로 이름을 지정하는 방법을 모릅니다.
빠르고 더러운 방법은 내 양식의 모든 입력 필드를 대상으로하는 것입니다. 그러나 그것은 큰 형태이기 때문에 내가 정말로 선택자 광기를 피하고 싶은 이유입니다.
최신 정보:
아직 컨트롤러를 만들지 않았지만 다음과 같이 Table1 개체를 받아야한다고 생각합니다.
public ActionResult UpdateTables(Table1 table1)
{
//Logic to call serviceclass
}
동기 POST (AJAX 아님)에서 하위 레코드는 인덱스별로 배치되어야합니다.
<input name="Table1.Id" value="1">
<input name="Table1.Table2[0].Id" value="1">
<input name="Table1.Table2[0].datastring" value="1A">
<input name="Table1.Table2[1].Id" value="2">
<input name="Table1.Table2[1].datastring" value="2B">
<input name="Table1.Table2[2].Id" value="3">
<input name="Table1.Table2[2].datastring" value="3C">
AJAX를 사용하고 컨트롤러 액션이 Table1 유형의 객체를 허용한다면;
public ActionResult UpdateTables(Table1 table1)
{
//Logic to call serviceclass
}
그런 다음 다음과 같이 json 개체를 형식화해야합니다 (form.Serialize가 작동하지 않으며 자식 엔터티를 반복하여 수동으로 형식을 지정해야합니다).
{
Id: 1,
Table2: [
{ Id: 1, datastring: "1A" },
{ Id: 2, datastring: "2B" },
{ Id: 3, datastring: "3C" }
]
}
HTML에 클래스가있는 div 인 하위 항목에 대한 래퍼를 추가하는 것이 좋습니다.
<div class="child">
<input name="Table1.Table2[0].Id" value="1">
<input name="Table1.Table2[0].datastring" value="1A">
</div>
<div class="child">
<input name="Table1.Table2[1].Id" value="2">
<input name="Table1.Table2[1].datastring" value="2B">
</div>
따라서 해당 child
클래스를 반복 하고 Table2 배열을 채울 수 있습니다.
var childArray = [];
// loop through elements with child class and access the input fields and assign to an array
$(".child").each(function(){
var id = $(this).find("input").eq(0).val();
var datastring = $(this).find("input").eq(1).val();
var childObject = {id:id,datastring:datastring};
childArray.push(childObject);
});
// create your json to submit via ajax
var jsonToSubmitToController = {
Id: $("#table1Id").val(),
Table2: childArray
};
여기에 설명 된 json이 작동하지 않는 경우 form.Serialize; 양식 직렬화를 사용하는 JSON 개체 게시가 C # 개체에 매핑되지 않음 `
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다