2012-08-10 6 views
3

내 모델 :동적 모델에 추가 된 텍스트 상자의 데이터를 데이터베이스에 저장하려면 어떻게해야합니까?

<table> 
    <tr> 
     <td><a href="#" onclick="AddTextBox()">+</a></td> 
     <td>@Html.TextBoxFor(m => m.Quantity)</td> 
     <td>@Html.TextBoxFor(m => m.Width)</td> 
     <td>@Html.TextBoxFor(m => m.Height)</td> 
    </tr> 
</table> 

AddTextBox()와 링크 동적을하는 jQuery를 함수이다 : 그 모델에 대한 나의 강력한 형식의보기에서

public class Order 
{ 
    public int OrderId { get; set; } 
    public int Quantity { get; set; } 
    public double Width { get; set; } 
    public double Height { get; set; } 
} 

내가 좋아하는 그 속성에 대한 TextBoxFor과 양식을 가지고 3 개 이상의 텍스트 상자를 포함하는 다른 테이블을 추가하십시오.

는 는

는 내 컨트롤러 :

[HttpPost] 
public ActionResult SaveOrder(Order order) 
{ 
    context.Order.Add(order); 
    context.SaveChanges(); 
    return View(); 
} 
은 는 는

내가 주문 객체가 양식에서하지만 첫 번째 수량, 무게와 높이 텍스트 상자의 값을 데이터로 채워진 것을 볼 수 디버깅, 내가 아는 그이 기대된다 행동과 나는 아래의 예와 같이 시험하고 내 목록이 제대로 작성 얻었 기 때문에 나는 모든 값을 수신하고있어 알고 그래서 여기

[HttpPost] 
public ActionResult SaveOrder(List<int> Quantity, List<int> Width, List<int> Height) 
{ 
    return View(); 
} 

다시 질문 : 어떻게 데이터의 배열을 유지하기 위해 모델을 만들어야합니다 내 데이터베이스에 저장 하시겠습니까?

질문에 대한 답변이 분명하고 답변에 도움이 되었기를 바랍니다.

+0

시험 공개 목록 주문 {get; };보기 모델에서 설정; –

+0

주문 주문 목록에 주문 목록을 추가한다는 의미입니까? –

+0

아닙니다. 도메인 모델이 아닌보기 모델을 사용하여 입력을 바인드하십시오. 뷰 모델에 주문 개체 목록이 있습니다. 그런 다음 컨트롤러에서 목록을 반복하고 각 반복에서 하나의 개별 주문 객체를 작성/채우기/편집 할 수 있습니다. –

답변

0

보기 모델에 추가하려는 목록이 있어야합니다. 싱글 톤의 고정 된 인스턴스에 모델을 추가 할 수 없습니다 (@model은보기 내부에 있음). 그래서 당신의 모델은 확장 가능해야합니다.

다음

샘플은, Editing a variable length list, ASP.NET MVC

그들이 한 일을보고 컨트롤 및보기에 대해 동일한 작업을 수행. 이 기사를 기반으로 완전히 내 앱을 만들었습니다. 기본 지식이있는 초보자도 이해할 수있을만큼 간단하고 영역 내에서 유사한 기능을 구현할 수 있습니다. 또한 다운로드와 함께 재생할 수 있습니다 전체 데모 소스 코드를

그것의 단순한 즉, 과정을 설명하는 데 시간이 너무 오래 당신

  1. 컨트롤러에 전용 조치를 작성하고 Ajax를 사용하여 전화 보기에 추가하려는 내용을 생성하십시오 (귀하의 경우 textbox,하지만 훨씬 더 복잡한 내용 일 수 있음).

  2. $(<your selector>).append(<your result from ajax call>). 당신이 추가/당신이 당신의 DTO에 추가하고 당신이 완료되면 트랜잭션을 커밋 하나

  3. 하나의보기에서 제거 그 항목의 실제 번호 목록을 가져 컨트롤러에 다시 게시에

  4. .

희망이 있습니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 저는이 질문을 이미 통과했으며이 [link]를 발견했습니다. (http://stackoverflow.com/questions/223149/how-do-you-handle-the-output-of-a-dynamically -generated-form-in-asp-net-mvc) 그러나 내가 찾고있는 것이 아닙니다 .. –

+0

그 예제에 무엇이 있는지 이해했습니다. 그러나 선물에 참조 된 Person 모델이 있다고 가정 해 봅시다. 모델을 추가하고 원하는 사람을 추가 할 때 원하는만큼 선물을 추가하려면 어떻게해야합니까? 그것이 내가 물어 보려고했던 것입니다. 저는 동일한 OrderId로 많은 수량, 무게 및 높이를 가질 필요가 있다고 생각합니다. 그렇게 할 수 있습니까? –

+0

확실히 가능합니다. 나는 너의 질문을 이해했다. 나는이 방법으로 그것을 할 것입니다 : 그의 선물이있는 사람을위한 1 개의보기는 그것들의 가변 숫자입니다. 일단 포스트 백 (postback)하면 이드가 어떤 사람인지 알 수 있습니다.이 이름은 원래 같은 이름으로 액션을 취함으로써 원래 설정되었습니다 ('@ HiddenFor' 장소에 보관하십시오). 이 문제를 구현하는 데 문제가 있으면 알려주십시오 (귀하의 개인이 고정되어 있고 변수가 선물 인 경우). 감사합니다. . –

0

마침내!

만약 내가 내 질문에 아주 분명했는지는 모르겠지만 여기에 해결책이있다. 프로그래밍에 익숙하지 않았기 때문에 그것이 매우 단순한 지 아닌지 모르겠다. 누가 날 도와 주려고 했어. 하나의 모델을 갖는

Istead 나는 내 데이터베이스의 모든 순서가 모든 조치에 개최 다른를 만들 수 있었다, 그래서 나는 같이 내 모델 변경 : 내보기에 그래서

public class Order 
{ 
    public int OrderId { get; set; } 
    public virtual List<Measures> Measures { get; set;} 
    // I have many other properties here but i erased for simplicity... 
} 

public class Measures 
{ 
    public int MeasuresId { get; set; } 
    public int Quantity { get; set; } 
    public double Width { get; set; } 
    public double Height { get; set; } 
    public Order Order { get; set; } 
} 

을 dinamically 일부 <input>를 추가 한 후 모든 이름 속성은 수량, 너비 또는 높이 나는 내 컨트롤러에 수신 된 응답은 다음과 같이이었다 :

Quantity: 10 
Width: 20 
Height: 16 
Quantity: 3 
Width: 14 
Height: 10 
Quantity: 500 
Width: 2 
Height: 5 

마지막으로, 내 컨트롤러는 다음과 같습니다

[HttpPost] 
    public ActionResult SaveOrder(Order Order, List<int> Quantity, List<double> Width, List<double> Height) 
    { 
     List<Measures> Measures = new List<Measures>(); 

     //At this point my Order model is filled with all the properties 
     //that came from the form and I'll save it to the Database so that 
     //this model can have its Id filled from the identity column 
     unitOfWork.ServicosRepository.Insert(Order); 
     unitOfWork.Save(); 

     //Now that I have the OrderId I can add how much Measures I want referencing 
     //that OrderId to access that further on my View 
     for (int i = 0; i < Quantity.Count; i++) 
     { 
      Measures measures = new Measures { Quantity = Quantity[i], Width = Width[i], Height = Height[i], Order = Order }; 
      unitOfWork.MedidasRepository.Inserir(medidas); 
      unitOfWork.Salva(); 
      Medidas.Add(medidas); 
     } 

     return PartialView("_Emitir", Pedido); 
    } 
+0

감사합니다. 감사합니다. 감사합니다. –

관련 문제