2012-05-30 4 views
0

웹 페이지의 테이블 항목을 편집하고 서버에 다시 게시하는 방법을 파악하는 데 어려움을 겪고 있습니다. (사실,이 경우 여러 항목을 선택하는 것처럼 사용자가 확인란을 선택하기를 원하지만 이는 단지 구현 일뿐입니다).MVC의 편집 가능한 테이블

문제는 웹 페이지에서 HttpPost에서 picSelections가 null 인 동안 문제입니다.

이 내보기의 맨 위에 :

@model IEnumerable<CarShow.lmit_pics> 

@using (Html.BeginForm()) 
{  
<div style="width:100%; height:60px; "> 
<input type="submit" value="Add Selected Photo(s) to Survey" /> 
</div> 

    for (int i = 0; i < Model.Count(); i++) 
    { 
     var item = Model.ElementAt(i); 
    <div style="width:296px; float:left"> 

      <div style="float:left; width:200px; margin-bottom:18px"> 

       @{string cropped = "../../../Content/Images/" + Html.DisplayFor(modelItem => item.picname).ToString() + "?" + Html.DisplayFor(modelItem => item.version).ToString(); 
       } 
       <img alt="picture" class="pic-size" src="@cropped" /> 
       <br /> 
        @Html.EditorFor(modelItem => item.brand) 
      </div> 

</div> 
     }  
} 
</div> 

이 컨트롤러에 있습니다

public ActionResult AddSurveyPic(string id) 
{ 
    var validPicSummaries = (IEnumerable)(from x in db.lmit_pics where x.enabled == 1 select x); 
    return View((IEnumerable)validPicSummaries); 
} 

[HttpPost] 
public ActionResult AddSurveyPic(IEnumerable<CarShow_MVC.lmit_pics> picSelections) 
{ 
     // Save data here 
} 

감사합니다.

+0

편집 가능한 테이블이 POST 가능 '

'안에 있습니까? –

+0

나는 그렇게 생각한다. 방금 더 많은 코드를 추가했습니다. 편집 가능한 입력란을 아직 추가하지 않았지만 게시물을 방해해서는 안됩니다. 어쩌면 내가 잘못 했어? – Dave

+0

편집 가능한 필드가 없다면 컨트롤러 액션에 게시하기 위해 인코딩 된 것이 없습니다 –

답변

2

보기에 루프를 작성하지 마십시오.

@model IEnumerable<CarShow.lmit_pics> 

@using (Html.BeginForm()) 
{  
    <div style="width:100%; height:60px; "> 
     <input type="submit" value="Add Selected Photo(s) to Survey" /> 
    </div> 
    @Html.EditorForModel() 
} 

을 한 후 자동으로 모델의 각 요소에 대해 렌더링됩니다 해당 편집기 템플릿 생성 : 나는 편집기 템플릿을 사용하도록 추천 할 것입니다 ~/Views/Shared/EditorTemplates/lmit_pics.cshtml을. 중요 템플릿의 이름과 위치를 주목하라 :

@model CarShow.lmit_pics 

<div style="width:296px; float:left"> 
    <div style="float:left; width:200px; margin-bottom:18px"> 
     @{string cropped = "../../../Content/Images/" + Html.DisplayFor(x => x.picname).ToString() + "?" + Html.DisplayFor(x => x.version).ToString(); } 
     <img alt="picture" class="pic-size" src="@cropped" /> 
     <br /> 
     @Html.EditorFor(x => x.brand) 
    </div> 
</div> 

당신은 또한 더 나은 컬렉션과 사전을 바인딩 할 때 기본 모델 바인더가 사용하는 이름 지정 규칙을 이해하기 위해 following article을 읽을 수 있습니다.

+0

'보기에 루프를 쓰지 마라 '- 정말요? 그것은 MVC1의 빵과 버터 또는 적어도 버터의 종류였습니다. 그게 많이 바뀌 었 니? –

+0

예, ASP.NET MVC 2의 강력한 입력 헬퍼 및 편집기/표시 템플릿이 도입되면서 상황이 크게 바뀌 었습니다.이 순간부터 더 이상 뷰에 루프를 작성할 필요가 없습니다. –

+0

저는 MVC에 너무 익숙하지 않습니다. 에디터 템플릿은 완전히 새로운 것입니다. 로드 시간이 훨씬 빨라졌습니다. MVC는 멋지다! 한 가지, HttpPost는 여전히 결과를 아직 잡지 못하고 있습니다. 나는 이것을 연구 할 것이지만, 내가 잘못하고있는 다른 것을 아는 것을 당신은 압니까? – Dave