2015-01-13 3 views
0

데이터 테이블이 있습니다. 각 행에는 스토어에 대한 세부 정보 (임의로 고유 한 ID를 가질 수 있음) 및 스토어 번호 (고유하고 비 순차적) 및 기타 정보가 표시됩니다.데이터를 컨트롤러에 전달

상점 번호를 선택할 때 상점의 세부 사항을 표시하려고합니다.

public class StoreViewModel 
{ 
    public FormatViewModel Formats { get; set; } 
    public List<StoreDetailsViewModel> StoreData { get; set; } 
} 

형식는 MvcCheckBoxList의 구현을위한 데이터를 포함하고 체크 박스가 FormMethod.GET 통해 업데이트 할 때 StoreData를 업데이트합니다.

스토어 모델 : 상점의

public class StoreDetailsViewModel 
{ 
    public int StoreID { get; set; } 
    public int StoreNo { get; set; } 
    public string StoreFormat { get; set; } 
    public string Version { get; set; } 

    public int CellNo { get; set; } 
    [ForeignKey("CellNo")] 
    public virtual Cell Cell { get; set; } 
} 

색인 페이지가 표시 테이블 :

상점의 목록에서 선택한 행에 대한을 StoreID을 통과 내가 동작하지 않습니다
@using (Html.BeginForm("Details", "Store", FormMethod.Post)) 
{ 
    <table class="table table-condensed table-bordered table-hover table-striped small"> 
     <tr> 
      @*<th class="text-center"></th>*@ 
      <th class="text-center">No.</th> 
      <th class="text-center">Format</th> 
      <th class="text-center">CBO Version</th> 
      <th class="text-center">Cell</th> 
      <th class="text-center"></th> 
     </tr> 

     @foreach (var item in Model.StoreData) 
     { 
      <tr> 
       <td class="text-center"> 
        @Html.Hidden("List_StoreIDs", @item.StoreID) 
        @Html.Hidden("id", @item.StoreID) 
        @item.StoreNo 
       </td> 
       <td class="text-center">@Html.DisplayFor(modelItem => item.StoreFormat)</td> 
       <td class="text-center">@Html.DisplayFor(modelItem => item.Version)</td> 
       <td class="text-center">@Html.DisplayFor(modelItem => item.CellNo)</td> 
       <td> 
        <input type="submit" name="submit" [email protected] /> 
       </td> 
      </tr> 
     } 
    </table> 
} 

(ActionLink는 쉽게 작동하지만 List_StoreID를 다시 전달해야합니다.)

나는 @ Html.Hidden ("id")가 작동 할 것을 기대했으나, 은 항상 1입니다.

컨트롤러

public ActionResult Details(int? id, int[] List_StoreIDs, string submit, string book) 
{ 
    if (id == null) 
    { 
     return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
    } 
    Store store = db.Stores.Find(id); 
    if (store == null) 
    { 
     return HttpNotFound(); 
    } 
... do something 
} 

어떤 제안 제발?

감사 크레이그

+0

List_StoreID가 필요한 이유는 모델에서 렌더링 할 때 Item.StoreID와 같은 것으로 보입니다. 모델을 검색하기 위해 StoreID 만 사용한다면 컨트롤러가 요구하는 것이 전부입니까? – Paddy

+0

@Paddy 인덱스 뷰에 렌더링 된 StoreID 목록을 세부 컨트롤러로 전달해야합니다. –

+0

왜 제출 버튼입니까? 이 양식은 여러 개의 ID가있는 전체 양식을 제출합니다 (이것이 항상 1 인 이유입니다). 액션 링크가 최선의 방법 일 수 있습니다. – Paddy

답변

1

행당 제출 버튼이 있습니다. 제출 단추 중 하나를 클릭하거나 전체 단추를 포함하는 행에서 변경된 세부 사항에만 관심이있는 경우 전체 양식을 제출 하시겠습니까?

후자 인 경우 행당 하나의 양식을 가질 수 있으며 "id"값은 각 양식에 적합합니다 (양식을 단일 요소에 넣고 부트 스트랩 CSS를 사용하여 양식 서식 지정)

1

당신이 컨트롤러가 StoreViewModel을 승인하고 다음 데이터가 컨트롤러에서 사용할 수 Html.HiddenFor를 사용하도록합니다.

+0

안녕하세요, 귀하의 제안에 감사드립니다. –

+0

안녕하세요. 작동하는 경우이 답변 옆의 화살표 아래에있는 녹색 눈금을 클릭하여 수락 할 수 있습니다. –

+0

내가 제안 된 변경 한 : 인덱스 : 'code' @foreach (Model.StoreData에서 VAR 항목) (Html.BeginForm ("세부 사항", "저장", FormMethod.Post)) 을 {사용 { @ Html.HiddenFor (modelItem => item.StoreID 새로운 ID = {@ item.StoreID}) } } '코드' 컨트롤러 : public ActionResult Details (int? id, StoreViewModel storeVM) 하지만 id storeVM은 null입니다. –

1

내가보기에 문제는 테이블의 각 행에 숨겨진 필드와 제출 단추가 있지만 모든 행이 같은 양식에 있다는 것입니다. 따라서 컨트롤러에 전달 된 ID는 클릭 한 특정 ID가 아닌 폼에있는 모든 ID (아마도 "1"로 시작) 목록입니다.

관련 문제