将对象中的列表从视图传递给控制器时遇到问题,列表始终为null。我该怎么做?
我的模特:
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
传递给控制器?
答案 0 :(得分:7)
默认模型活页夹不适用于字段,因此请将images
设为属性:
public IList<ImageModel> images { get; set; }
答案 1 :(得分:1)
我猜你会遇到将复杂类型绑定到模型的问题。如果你不能正常工作。这是另一种方式。
您有一堆复选框,可能具有相同的名称和不同的值。您可以将它们发布到采用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" />
}
在Test方法中为您提供一系列布尔值:
公共ActionResult测试(bool []空白) {}
答案 2 :(得分:0)
尝试更改模型“SchoolImages”;使用数组而不是IList&lt;&gt;。
答案 3 :(得分:0)
它为null,因为默认模型绑定器不知道如何初始化它。 将您的字段图像更改为属性并添加如下构造函数:
public class SchoolImages
{
public SchoolImages()
{
images = new List<ImageModel>();
}
public Nullable<int> schoolid { get; set; }
public IList<ImageModel> images { get; set; }
}
它应该有用。