我如何将 Ienumerable class 强绑定到 MVC asp.net 中的视图?
How do i strongly bind an Ienumerable class to a view in MVC asp.net?
请给我下面的模型class
public class EditJob
{
public JobPost JobPost { get; set; }
public IEnumerable<JobRequirement> JobRequirement { get; set; }
public IEnumerable<JobResponsibility> JobResponsibility { get; set; }
}
我将 class 强烈绑定到一个视图,并想用它在控制器中进行编辑。我有一个控制器接收如下模型。
[HttpPost]
public ViewResult SaveJob(EditJob model)
{
}
我将我的 Ienumerable 动态绑定到我视图中的文本框,如下所示。
@for (int i = 0; i < Model.JobResponsibility.Count();i++ )
{
JobWebsite.Domain.Enitities.JobResponsibility rs = Model.JobResponsibility.ElementAt(i);
<label class="control-label">Responsibility :</label>
Html.Hidden("Responsibility[" + i + "]", rs);
@Html.TextBoxFor(x => rs, new { @class = "form-control" }) <br />
}
单击按钮时,我意识到模型中的两个 IEnumerable 方法没有绑定。模型中的 JobPosts 不为空,但我的 Ienumerable properties not always empty 。我添加了一个隐藏字段来保存我的值,但我无法将它们传递给控制器。请问我该如何实现?
我目前看不到任何绑定到 JobResponsibility
的内容。
尝试改变
Html.Hidden("Responsibility[" + i + "]", rs);
至
Html.Hidden("JobResponsibility[" + i + "]", rs);
如果您检查 html,您会发现控件 name
属性没有用于绑定的正确索引器。将集合更改为 IList
并按如下方式使用:(请注意,您尚未发布 JobResponsibility
的模型,因此我假设它包含属性 ID
和 Name
)
@for (int i = 0; i < Model.JobResponsibility.Count; i++ )
{
@Html.HiddenFor(m => m.JobResponsibility[i].ID)
@Html.TextBoxFor(m => m.JobResponsibility[i].Name)
}
或者,为 JobResponsibility
类型创建自定义 EditorTemplate
/Views/Shared/EditorTemplates/JobResponsibility.cshtml
@model JobResponsibility
@Html.HiddenFor(m => m.ID)
@Html.TextBoxFor(m => m.Name)
并在主视图中
@model EditJob
@using(Html.BeginForm())
{
.....
@Html.EditorFor(m => m.JobResponsibility)
....
}
请给我下面的模型class
public class EditJob
{
public JobPost JobPost { get; set; }
public IEnumerable<JobRequirement> JobRequirement { get; set; }
public IEnumerable<JobResponsibility> JobResponsibility { get; set; }
}
我将 class 强烈绑定到一个视图,并想用它在控制器中进行编辑。我有一个控制器接收如下模型。
[HttpPost]
public ViewResult SaveJob(EditJob model)
{
}
我将我的 Ienumerable 动态绑定到我视图中的文本框,如下所示。
@for (int i = 0; i < Model.JobResponsibility.Count();i++ )
{
JobWebsite.Domain.Enitities.JobResponsibility rs = Model.JobResponsibility.ElementAt(i);
<label class="control-label">Responsibility :</label>
Html.Hidden("Responsibility[" + i + "]", rs);
@Html.TextBoxFor(x => rs, new { @class = "form-control" }) <br />
}
单击按钮时,我意识到模型中的两个 IEnumerable 方法没有绑定。模型中的 JobPosts 不为空,但我的 Ienumerable properties not always empty 。我添加了一个隐藏字段来保存我的值,但我无法将它们传递给控制器。请问我该如何实现?
我目前看不到任何绑定到 JobResponsibility
的内容。
尝试改变
Html.Hidden("Responsibility[" + i + "]", rs);
至
Html.Hidden("JobResponsibility[" + i + "]", rs);
如果您检查 html,您会发现控件 name
属性没有用于绑定的正确索引器。将集合更改为 IList
并按如下方式使用:(请注意,您尚未发布 JobResponsibility
的模型,因此我假设它包含属性 ID
和 Name
)
@for (int i = 0; i < Model.JobResponsibility.Count; i++ )
{
@Html.HiddenFor(m => m.JobResponsibility[i].ID)
@Html.TextBoxFor(m => m.JobResponsibility[i].Name)
}
或者,为 JobResponsibility
EditorTemplate
/Views/Shared/EditorTemplates/JobResponsibility.cshtml
@model JobResponsibility
@Html.HiddenFor(m => m.ID)
@Html.TextBoxFor(m => m.Name)
并在主视图中
@model EditJob
@using(Html.BeginForm())
{
.....
@Html.EditorFor(m => m.JobResponsibility)
....
}