2015-01-26 2 views
0

컨트롤러에 수량 속성 게시 (편집 작업). SQL 데이터베이스에서 ProductSet과 연결된 OrderedProductSet을 편집 중입니다 (이름과 가격이 표시됩니다). 보기에서 컨트롤러로 여러 데이터를 전달하는 방법? 데이터를 받기 위해 컨트롤러 클래스에 메서드를 작성하는 방법 (이 특정 경우에 메서드 인수에 대해 묻습니다).뷰에서 컨트롤러로 MVC

내보기 : (물론 분리 된 클래스에서)

@model [email protected]{ 
ViewBag.Title = "Edycja zamówienia"; 
} 

<h2>Edycja zamówienie</h2> 
@using (Html.BeginForm()) 
{ 
@Html.AntiForgeryToken() 
<table class="table"> 
    <tr> 
     <th> 
      <b>Nazwa produktu</b> 
     </th> 
     <th> 
      <b>Cena</b> 
     </th> 
     <th> 
      <b>Ilość</b> 
     </th> 

     <th></th> 
    </tr> 

    @foreach (var item in Model.orderedProductSet) 
    { 
     <tr> 

      <td> 
       @Html.DisplayFor(modelItem => item.ProduktSet.name) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.ProduktSet.price) 
      </td> 

      <td> 
       @Html.EditorFor(model => item.quantity, new { htmlAttributes = new { @class = "form-control" } }) 
      </td> 
     </tr> 
    } 

</table> 


<div class="form-group"> 
<div class="col-md-offset-2 col-md-10"> 
    <input type="submit" value="Potwierdź zmiany" class="btn btn-default" /> 
</div> 
</div> 
} 



<div> 
@Html.ActionLink("Powrót", "Index") 
</div> 
@section Scripts { 
@Scripts.Render("~/bundles/jqueryval") 
} 

내 모델 :

public class ProductViewModel 
{ 
    public OrderSet orderSet { get; set; } 
    public IEnumerable<OrderedProductSet> orderedProduktSet { get; set; } 
} 


public partial class OrderedProduktSet 
{ 
    public int orderNumber{ get; set; } 
    public int productNumber { get; set; } 
    public int ilosc { get; set; } 

    public virtual ProduktSet ProduktSet { get; set; } 
    public virtual OrderSet OrderSet { get; set; } 
} 
+0

질문의 문구를 변경해야합니다. 기술적으로, 뷰는 절대로 컨트롤러에 데이터를 보내지 않습니다 (이런 식으로). 아마도'컨트롤러 메소드에 여러 데이터 포인트를 게시하는 방법'을 준비해야합니다. –

+0

@ErikPhilips가 변경했습니다. 감사합니다. –

답변

0

당신은 for 루프에서 당신이 컬렉션에 대한 컨트롤을 구성하거나 custum를 사용할 필요는 EditorTemplateOrderedProduktSet이고 컨트롤의 이름은 indexers 및 게시물에 바인딩 할 수 있습니다. 컬렉션이 IList 일 때 for 루프 접근이 필요합니다.

@model Shop.Models.ProductViewModel 
@using(Html.BeginForm()) 
{ 
    .... 
    for(int i = 0; i < Model.orderedProductSet.Count; i++) 
    { 
    @Html.DisplayFor(m => m.orderedProductSet[i].ProduktSet.name) 
    .... 
    @Html.EditorFor(m => m.orderedProductSet[i].quantity, new { htmlAttributes = new { @class = "form-control" } }) 
    } 
    <input type="submit" /> 
} 

컨트롤러 (모델이 OrderedProductSet의 컬렉션을 포함, 바인딩됩니다)

public ActionResult Edit(ProductViewModel model) 
{ 
    .... 
} 

또는, 당신은 EditorTemplate

/Views/Shared/EditorTemplates/OrderedProduktSet.cshtml

를 만들 수 있습니다
@model OrderedProduktSet 
@Html.DisplayFor(m => m.ProduktSet.name) 
@Html.EditorFor(m => m.quantity, new { htmlAttributes = new { @class = "form-control" } }) 

주보기

@model Shop.Models.ProductViewModel 
@using(Html.BeginForm()) 
{ 
    .... 
    @Html.EditorFor(m => m.orderedProductSet) 
    <input type="submit" /> 
} 
+0

두 번째 옵션은 매력처럼 작동합니다! 언제나 EditorTemplates 사용하기. –

-1

Viewbag 여기에 당신의 친구입니다. 일반적으로 MVC에서는 View에서 Controller로 데이터를 전달합니다. View의 컨트롤러에서 Viewbag에 설정된 데이터에 액세스 할 수 있습니다.

컨트롤러가보기를 처리하도록하는 가장 간단한 방법은보기와 동일한 이름으로 컨트롤러에 actionresult 메서드를 만드는 것입니다. 목록을 액세스

public ActionResult Index()  
{ 
    return View(); 
} 

:

사용하십시오 Viewbag

는 예를 들어,보기 따라서 당신이보기 데이터를 처리하는 컨트롤러에서 다음과 같은 방법을 것이다, 인덱스라고합니다.

컨트롤러

Viewbag.MyList = myList 

보기

다음
@foreach (var item in Viewbag.MyList) 

대한 추가 정보를 원하시면 좋은 링크입니다 : http://www.asp.net/mvc/overview/older-versions/getting-started-with-aspnet-mvc4/adding-a-view

+0

ActionResult 메서드를 사용해야한다는 것을 알고 있습니다. 그러나이 특정한 경우에 나의 방법 논쟁은 무엇이 될 것인가? 나는'public ActionResult Edit (IENumberable list)'에 대해 생각했지만'list'는 null입니다.정말 Viewbag만을 사용하여 모든 데이터를 전달할 수 있습니까? 하나의 값은 아니며 여러 값을 전달해야합니다. –

+0

나는 이미 위의 답변을 주셨습니다. 아니. Viewbag를 사용하십시오. Viewbag.List = MyList (귀하의 컨트롤러에서) 다음보기에서 Viewbag.MyList에서 @foreach var 항목 – ma11achy

+1

OP는 downvote하지 않았다. 이것은 문제 (_ 데이터를 수신하기 위해 컨트롤러 클래스에서 메소드를 작성하는 방법 _)와 관련이 없으며 잘못된 코드입니다. OP에는 이미 컬렉션이있는 모델이 있습니다. ViewBag에 할당 할 시점은 무엇입니까? 그렇게했다면 포스트 백 모델에 묶일 수 없습니다. 그리고 어쨌든 바인딩을 위해서'foreach' 루프를 사용할 수 없습니다 - 그것은 컨트롤을 인덱서로 올바르게 명명하지 않습니다!). 그리고'ViewBag'는 결코 당신의 친구가 아닙니다! –

관련 문제