C# MVC Html.CheckBoxFor 未绑定到模型
C# MVC Html.CheckBoxFor not binding to model
我遇到了一个令人沮丧的问题,在发回控制器时,我似乎无法让模型绑定与 CheckBoxFor 一起工作。我的模型 returns 返回空值。如有任何帮助,我们将不胜感激!
查看
@model IEnumerable<FFR.Context.Matchup>
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>View1</title>
</head>
<body>
<p>
@Html.ActionLink("Create New", "Create")
</p>
@using (Html.BeginForm(Html.BeginForm("Submit", "Matchups", FormMethod.Post)))
{
@foreach (var item in Model) {
<tr>
<td>@Html.CheckBoxFor(modelItem => item.isChecked)</td>
<td>
@Html.DisplayFor(modelItem => item.MatchupDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Spread)
</td>
<td>
@Html.DisplayFor(modelItem => item.HomeScore)
</td>
<td>
@Html.DisplayFor(modelItem => item.AwayScore)
</td>
}
<tr><td><input type="submit" value="Submit" /></td></tr>
</table>
}
</body>
</html>
控制器
[HttpPost]
public ActionResult Submit(IEnumerable<Matchup> model)
{
//processing
}
型号
public partial class Matchup
{
public Matchup()
{
this.Bets = new HashSet<Bet>();
}
public int MatchupId { get; set; }
public int HomeTeamId { get; set; }
public int AwayTeamId { get; set; }
public int LocationId { get; set; }
public System.DateTime MatchupDate { get; set; }
public int WeekId { get; set; }
public int SeasonId { get; set; }
public Nullable<decimal> Spread { get; set; }
public Nullable<decimal> HomeScore { get; set; }
public Nullable<decimal> AwayScore { get; set; }
public string TimeLeft { get; set; }
public Nullable<System.DateTime> LastUpdate { get; set; }
public Boolean isChecked { get; set; }
}
您需要使用 for
循环,以便您的控件使用索引器正确命名。将模型更改为@model IList<FFR.Context.Matchup>
,然后在视图中更改为
for(int i = 0; i < Model.Count; i++)
{
@Html.CheckBoxFor(m => m[i].isChecked)
....
}
如果您不能使用 IList
,那么您可以为您的模型使用自定义 EditorTemplate
(refer this example)
旁注:为什么要使用 Layout = null;
并在视图中呈现 head
(而不是指定布局)?
希望这篇 link 能让您深入了解模型绑定如何与列表一起工作。
http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/
请注意,您在视图中做的事情太多了。尝试为更简单的视图使用编辑器模板。
我还注意到有 2 个请求开始表单。你真的打算那样用吗?
我遇到了一个令人沮丧的问题,在发回控制器时,我似乎无法让模型绑定与 CheckBoxFor 一起工作。我的模型 returns 返回空值。如有任何帮助,我们将不胜感激!
查看
@model IEnumerable<FFR.Context.Matchup>
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>View1</title>
</head>
<body>
<p>
@Html.ActionLink("Create New", "Create")
</p>
@using (Html.BeginForm(Html.BeginForm("Submit", "Matchups", FormMethod.Post)))
{
@foreach (var item in Model) {
<tr>
<td>@Html.CheckBoxFor(modelItem => item.isChecked)</td>
<td>
@Html.DisplayFor(modelItem => item.MatchupDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Spread)
</td>
<td>
@Html.DisplayFor(modelItem => item.HomeScore)
</td>
<td>
@Html.DisplayFor(modelItem => item.AwayScore)
</td>
}
<tr><td><input type="submit" value="Submit" /></td></tr>
</table>
}
</body>
</html>
控制器
[HttpPost]
public ActionResult Submit(IEnumerable<Matchup> model)
{
//processing
}
型号
public partial class Matchup
{
public Matchup()
{
this.Bets = new HashSet<Bet>();
}
public int MatchupId { get; set; }
public int HomeTeamId { get; set; }
public int AwayTeamId { get; set; }
public int LocationId { get; set; }
public System.DateTime MatchupDate { get; set; }
public int WeekId { get; set; }
public int SeasonId { get; set; }
public Nullable<decimal> Spread { get; set; }
public Nullable<decimal> HomeScore { get; set; }
public Nullable<decimal> AwayScore { get; set; }
public string TimeLeft { get; set; }
public Nullable<System.DateTime> LastUpdate { get; set; }
public Boolean isChecked { get; set; }
}
您需要使用 for
循环,以便您的控件使用索引器正确命名。将模型更改为@model IList<FFR.Context.Matchup>
,然后在视图中更改为
for(int i = 0; i < Model.Count; i++)
{
@Html.CheckBoxFor(m => m[i].isChecked)
....
}
如果您不能使用 IList
,那么您可以为您的模型使用自定义 EditorTemplate
(refer this example)
旁注:为什么要使用 Layout = null;
并在视图中呈现 head
(而不是指定布局)?
希望这篇 link 能让您深入了解模型绑定如何与列表一起工作。 http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/
请注意,您在视图中做的事情太多了。尝试为更简单的视图使用编辑器模板。
我还注意到有 2 个请求开始表单。你真的打算那样用吗?