我将检查后的复选框放入我的mvc控制器并将其保存在数据库中时出现问题。我在创建视图中为每个循环生成了我的列表。
我的广告类:
public class Advert
{
public int AdvertId { get; set; }
public int SponsorId { get; set; }
[DisplayName("Amount")]
public int Amount { get; set; }
[DisplayName("Start date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yy}")]
[DataType(DataType.Date)]
public System.DateTime StartDate { get; set; }
[DisplayName("End date")]
[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yy}")]
public DateTime EndDate { get; set; }
public List<Continent> Continents { get; set; }
public List<Country> Countries { get; set; }
public List<Sport> Sports { get; set; }
public Gender Gender { get; set; }
public Sponsor Sponsor { get; set; }
public int SponsorTypeId { get; set; }
}
(部分)创建视图
<div class="editor-label">
@Html.LabelFor(model => model.SponsorId, "Select sport")
</div>
<div class="editor-field">
@foreach (var item in Model.Sports)
{
<tr>
<td>
<input type="checkbox" id="@item.SportId" name="SelectedSport" value="@item.SportId"/>
</td>
<td>
@item.SportName
</td>
</tr> <br />
}
</div>
AdvertController
// POST: /Advert/Create
[HttpPost]
public ActionResult Create(Advert advert)
{
ViewBag.SponsorId = new SelectList(db.Sponsors, "SponsorId", "SponsorCompany", advert.SponsorId);
advert.SponsorTypeId = service.sponsorType(advert.Amount);
if (ModelState.IsValid)
{
db.Adverts.Add(advert);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(advert);
}
我暂时坚持这一点,所以欢迎任何帮助!
答案 0 :(得分:2)
如果您只想抓住孩子,那么最直接的方法就是使用命名参数。
<input type="checkbox" id="myParams" name="myParams" value="@item.SportId"/>
然后只需更改您的定义以按名称提取该列表
public ActionResult Create(Advert advert, string[] myParams)
答案 1 :(得分:1)
如果模型中没有此类字段,您希望模型绑定器如何绑定SelectedSport
表单值?您需要将其添加到Advert
类中:
public IEnumerable<String> SelectedSport { get; set; }
然后应使用所选复选框的值填充此内容。
此外,您似乎在视图中直接使用数据库实体 。这是不好的!您应该创建一个单独的AdvertViewModel
类,并使用控制器中所需的值填充它。