Asp.net-Mvc

如何將列表從視圖傳遞到控制器

  • February 8, 2014

將對像中的列表從視圖傳遞到控制器時出現問題,列表始終為空。我該怎麼做?

我的模型:

public class ImageModel
{
   public int id { get; set; }
   public string url { get; set; }
   public bool delete { get; set; }
}

public class SchoolImages
{
   public Nullable<int> schoolid { get; set; }
   public IList<ImageModel> images;
}

風景:

@model SchoolAppManager.Models.SchoolImages

@using (Html.BeginForm("DeleteImages", "Images"))
{

   @Html.HiddenFor(x => x.schoolid)
   <table>
   @for (int i = 0; i < Model.images.Count(); i += 4) {

       <tr>
           <td>
               <img src="@Url.Content(Model.images[i].url)" width="50%" />
               <br />
               @Html.CheckBoxFor(x => x.images[i].delete)
               @Html.HiddenFor(x => x.images[i].id)
           </td>
           <td>
               @if (i + 1 < Model.images.Count())
               {
                   <img src="@Url.Content(Model.images[i + 1].url)" width="50%" />
                   <br />
                   @Html.CheckBoxFor(x => x.images[i + 1].delete)
                   @Html.HiddenFor(x => x.images[i + 1].id)
               }
           </td>
           <td>
               @if (i + 2 < Model.images.Count())
               {
                   <img src="@Url.Content(Model.images[i + 2].url)" width="50%" />
                   <br />
                   @Html.CheckBoxFor(x => x.images[i + 2].delete)
                   @Html.HiddenFor(x => x.images[i + 2].id)
               }
           </td>
           <td>
               @if (i + 3 < Model.images.Count())
               {
                   <img src="@Url.Content(Model.images[i + 3].url)" width="50%" />
                   <br />
                   @Html.CheckBoxFor(x => x.images[i + 3].delete)
                   @Html.HiddenFor(x => x.images[i + 3].id)
               }
           </td>
       </tr>
   }
   </table>

   <input type="submit" value="delete" />
}

當我點擊刪除時,SchoolImages傳遞給控制器,在控制器中SchoolImages.schoolId有值,但是,SchoolImages.images為空。我怎樣才能傳遞SchoolImages.images給控制器?

預設模型綁定器不適用於欄位,因此請創建images一個屬性:

public IList<ImageModel> images { get; set; }

我猜你在將復雜類型綁定到你的模型時會遇到問題。萬一你沒有得到那個工作。這是另一種方法。

您有一堆複選框,可能具有相同的名稱和不同的值。您可以將它們發佈到採用 FormCollection 的方法,即。

public ActionResult Test(FormCollection collection)
{
   string results = collection["Blanks"];
}

這將為您提供一個以逗號分隔的值列表(或 null,其中沒有勾選複選框)。

或者,如果您在伺服器上有可能的值作為數組,那麼您可以根據它們的數組值為複選框命名,這意味著您可以執行以下操作:

@using (Html.BeginForm("Test","Home"))
{
   @Html.CheckBox("Blanks[0]", false);
   @Html.CheckBox("Blanks[1]", false);
   @Html.CheckBox("Blanks[2]", false);

   <input type="submit" value="Submit" />
}

在您的測試方法中為您提供一個布爾數組:

公共 ActionResult 測試(布爾

$$ $$空白){ }

引用自:https://stackoverflow.com/questions/21646922