2016-02-16 2 views
1

У меня есть view, который визуализирует в Partial View динамически, используя следующий кодНе удалось опубликовать список <T> в контроллер

Главная Просмотреть

@model JoyRydeStoreWebPortal.Areas.Admin.Models.StoreDetailModel 
@{ 
ViewBag.Title = "StoreDetail"; 
Layout = "~/Areas/Admin/Views/Shared/_layoutAdmin.cshtml"; 
} 

<div class="panel"> 
     <div class="panel-heading"> 
      <h3 class="panel-title">Store category</h3> 
      <div class="panel-actions"> 
       <a href="#editCategory" id="createCategory" data-toggle="modal" class="btn btn-default"><i class="fa fa-plus" aria-hidden="true"></i></a> 
      </div> 
     </div> 

     <div class="panel-body"> 

      <ul class="list-group list-group-dividered list-group-full"> 
       @{foreach (var cat in Model.Categories){ 
         if (cat.IsExist) { 
         <li class="list-group-item">@cat.CategoryName</li> 
         } 
        } 
       }      
      </ul> 

     </div> 

    </div> 

// Render Partial View and open in bootstrap modal 

$("#createCategory").on("click", function() { 

    $.ajax({ 
     contentType: "application/json; charset=utf-8", 
     url: "../displayCategories/" + GetURLParameter(), 
     success: function (partialViewResult) { 
      $("#catModalBox").html(partialViewResult); 
      $("#editCategory").modal(); 


      $('#editCategory .close-btn').on("click", function() { 


       $('#editCategory').hide('slow'); 
       $('.modal-backdrop').hide('slow'); 
      }); 
     }, 
     error: function (xhr, ajaxOptions, thrownError) { 
      debugger; 
     } 

    }); 
}); 

Контроллер

[HttpGet] 
    public ActionResult displayCategories(string info) 
    { 
     var StoreID = Convert.ToInt64(Request.RequestContext.RouteData.Values["id"]); 
     return PartialView("Partial_CreateCategory", getStoreCategories(StoreID)); 
    } 
[HttpPost] 
    public ActionResult SaveCategories(List<StoreCategoryDetail> lstCat) 
    { 
     // Getting lstCat Null here 
     return RedirectToAction("StoreDetails"); 
    } 

Частичный вид

@model List<JoyRydeStoreWebPortal.Areas.Admin.Models.StoreCategoryDetail> 

<div class="modal fade" id="editCategory" aria-hidden="false" role="dialog" tabindex="-1" data-backdrop="static" data-keyboard="false"> 
<div class="modal-dialog"> 
    <form class="modal-content" method="post" action="@Url.Action("SaveCategories","Index", new{ Area = "Admin" })">   
     <div class="modal-header"> 
      <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
       <span aria-hidden="true">×</span> 
      </button> 
      <h4 class="modal-title" id="createStoreTitle">Edit Category</h4> 
     </div> 
     <div class="modal-body"> 
      <div class="">      
       @for (int i = 0; i < Model.Count; i++) 
       { 
        <div class="checkbox-custom checkbox-default"> 
         @Html.CheckBoxFor(m => m.ElementAt(i).IsExist, new { @id = "chk" + i }) 
         @Html.Label("chk" + i, Model.ElementAt(i).CategoryName) 
        </div> 
       } 
      </div> 
     </div> 
     <div class="modal-footer"> 
      <button type="button" class="btn btn-default close-btn">Close</button> 
      <button type="submit" class="btn btn-primary">Save changes</button> 
     </div> 
    </form> 
</div> 

На форме Разместить в Partial View, я получаю Null в List<StoreCategoryDetail>. Зачем ?

+1

Используйте '@ Html.CheckBoxFor (т => т. [Я] .IsExist)' (не 'ElementAt (я)') –

+0

@OrelEraki не могли бы понять свой комментарий ... Пожалуйста, дайте мне знать в деталях , –

+0

@StephenMuecke, который делает трюк .. может у, пожалуйста, дайте мне знать, что было не так в моем подходе –

ответ

4

Вы использование @Html.CheckBoxFor(m => m.ElementAt(i).IsExist) генерирует имя атрибуты без индексаторами, т.е.

<input type="checkbox" name="IsExist" .... /> 
<input type="hidden" name="IsExist" .... /> 

Вы должны использовать @Html.CheckBoxFor(m => m[i].IsExist), который generae правильное название атрибутов

<input type="checkbox" name="[0].IsExist" .... /> 
<input type="hidden" name="[0].IsExist" .... /> 

Примечание там не нужно переопределить по умолчанию используется атрибут id, и для ярлыка можно использовать

@Html.LabelFor(m => m[i].IsExist, Model[i].CategoryName) 
0
@Html.CheckBoxFor(m => m[i].IsExist, new { @id = "chk" + i }) 

 Смежные вопросы

  • Нет связанных вопросов^_^