0

ASP.NET MVC의 제출 양식에서 부분 뷰의 데이터를 전달하는 방법은 무엇입니까?ASP.NET MVC에서 부분 뷰의 데이터 전달

@using (Html.BeginForm("Edit", "BlogPost", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 
    ................ 
    @Html.Partial("PostImagesForPost",Model.PostImages) 
} 

PostImagesForPost - 부분보기 :

@model IEnumerable<Blog.Models.PostImage> 

<script type="text/javascript" src="~/Scripts/jquery.zoom.min.js"></script> 

<div> 

@{ 
    List<Blog.Models.PostImage> images = Model.ToList(); 

    <ul class="images"> 

     @foreach (var img in images) 
     { 
      string parameterValue_small = "~/BlogPhotos/120/" + img.Photo.ToString(); 
      string parameterValue_big = "~/BlogPhotos/600/" + img.Photo.ToString(); 

      <li> 
       <div id="jquery-image-zoom-example"> 
        <span data-postid="@img.ID" data-delete="true" class="deletespan"></span> 
        <a href="@Url.Content(parameterValue_big)"> 
         <img src="@Url.Content(parameterValue_small)" data-postid="@img.ID" class="zm" onclick="$('.jquery-image-zoom img').click()" /> 
        </a> 
        <input type="checkbox" checked="checked" name="selectedImagesForDelete" style="display:none;" data-postid="@img.ID" value="@img.ID" /> 
       </div> 
      </li> 
} 
    </ul> 

} 

에서 함수를 파라미터 selectedImagesForDelete 제출 널이다.

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit(Post post,string[] selectedImagesForDelete) 
    {...........} 
+0

브라우저보기 소스에서 확인란이 올바르게 바인딩되어 있는지 확인하고 올바른 경우 요청 [ "selectedImagesForDelete"]을 사용하여 param 대신 배열을 가져 오십시오 –

답변

0

나는 당신의 이름 속성 이름으로 인덱스를 가질 필요가 믿는 :

는 인덱스 변수라는 인덱스를 작성하고 각 반복

<input type="checkbox" name="selectedImagesForDelete[index]" value="2"> 
1

후를 증가 이것은 함께 할 수 없다 사실 당신은 부분적인 것을 사용하고 있으며 MVC의 모델 바인더가 어떻게 작동하는지 모든 것을 처리합니다. 반복 가능한 게시 된 항목의 경우 모델 바인더는 필드 이름이 ListProperty[index].ModelProperty의 형식이어야합니다. 문제는 도우미 패밀리가 foreach을 사용하여 달성 할 수없는 색인 값을 전달하지 않으면이 이름을 올바르게 작성하지 않는다는 것입니다. 이 솔루션은 대신, 단순히 for을 사용하는 것입니다

@for (var i = 0; i < images.Count(); i++) 
{ 
    Html.EditorFor(m => image[i].SomeProperty) 
} 

색인 생성 값 (images[i])를 전달하여, 헬퍼는, 이름에 적절한 인덱스 HTML 접두사를 추가 할 필요가 있다는 인식 ModelBinder를가 있도록 다시 게시 할 때 가치를 채울 곳을 이해합니다.

실제로 필드에 HTML을 수동으로 지정하는 것처럼 보이지만 실제로 이름 값을 가져 오는 책임은 해당 사용자에게 있습니다.

0

사실 자바 스크립트 파일에는 문제가있었습니다. 체크 박스는 확인되지 않았습니다.

<input type="checkbox" name="selectedImagesForDelete" value="@img.ID" /> 

그러나이 문제는 해결되어 이제 모든 것이 예상대로 작동합니다.

나를 도와 주심에 감사드립니다. 감사합니다.