繁体   English   中英

我如何将Ienumerable类牢固绑定到MVC asp.net中的视图?

[英]How do i strongly bind an Ienumerable class to a view in MVC asp.net?

请在下面我有一个模型课

 public class EditJob
 {
        public JobPost JobPost { get; set; }
        public IEnumerable<JobRequirement> JobRequirement { get; set; }
        public IEnumerable<JobResponsibility> JobResponsibility { get; set; }
  }

我强烈地将类绑定到视图,并希望将其用于在控制器中进行编辑。 我有一个接收如下模型的控制器。

[HttpPost]
public ViewResult SaveJob(EditJob model)
{

}

在下面的视图中,我将Ienumerable动态绑定到texbox。

@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属性并不总是为空。 我添加了一个隐藏字段来保存我的值,但是在将它们传递给控制器​​时遇到问题。 请我如何做到这一点?

如果检查html,您将看到控件name属性没有正确的绑定索引器。 可以将集合更改为IList并按以下方式使用:(请注意,您尚未发布JobResponsibility的模型,因此我假设它包含属性IDName

@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)
  ....
}

目前看不到绑定到JobResponsibility任何内容。 尝试改变

Html.Hidden("Responsibility[" + i + "]", rs);

Html.Hidden("JobResponsibility[" + i + "]", rs);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM