0

在我的模型中,我有 IEnumerable,因此我不能在视图中使用 for 循环。如果我使用 foreach 生成的 Html 没有索引,这就是我需要的。我该如何解决这个问题。我正在尝试使用相同的视图模型来创建和编辑,但我在编辑部分遇到了问题。

    public class CreateModule
    {
        //Empty form to handle form serialization
        public CreateModule()
        {
        }

        public long Id { get; set; }
        [Required]
        public string ModuleId { get; set; }

        [DataType(DataType.DateTime)]
        public DateTime DateEntered { get; set; }

        public string KindName { get; set; }
        public string TypeName { get; set; }

        public string SelectedModuleTypeName { get; set; }

        public IEnumerable<SelectListItem> TypeNames { get; set; }

        public IEnumerable<Property> Properties { get; set; }
    }
    public class Property
    {
        public string Name { get; set; }
        public string Value { get; set; }
    }

这是我同时使用 for 和 foreach 的观点,但我评论了 for 因为我目前无法在其中使用索引

  @*
  @for (int i = 0; i < Model.Properties.Count(); i++)
  {
     <label class="label">@Model.Properties[i].Value</label>
     <div class="input-block-level">@Html.TextBoxFor(model => Model.Properties[i].Value, new { @value = Model.Properties[i].Value })</div>
   }
  *@

   @foreach (var properties in Model.Properties)
   {
      <div class="label">@properties.Name</div>
      <div class="input-block-level">@Html.TextBoxFor(model => properties.Value, new { @value = properties.Value })</div>
      <br/>
    }

目前 Html.Textbox 生成以下两个名称,其中没有索引 properties.value ,因此在发布期间提交的值是 Null。如果我使用 for 循环,那么我认为我的 properties.value 将更改为properties[0].valueproperties[1].value ??? 我不确定,但这就是我想要实现的目标。

如果我改变我的模型

 public IEnumerable<Property> Properties { get; set; }

public List<Property> Properties { get; set; }

那么我在存储库中的以下方法将不起作用,因为它为值属性重新输入 IQueryable,并且无法从 IQueryable 转换为 List。

public CreateModule GetModuleDetails(long id)
{
     var module = (_dbSis.Modules.Where(t => t.Id == id).Select(m => new CreateModule
      {
         Id = id,
         ModuleId = m.ModuleId,
         TypeName = m.ModuleType.TypeName,
         KindName = m.ModuleType.ModuleKind.KindName,
         Properties = m.PropertyConfiguration.PropertyInstances.Select(
                    x => new Property { Name = x.Property.Name, Value = x.Value })
       }));

       return (module.FirstOrDefault());
  }
4

1 回答 1

0

创建如下所示的局部视图,将其命名为 Property.cshtml,并将其放在 Views/Shared/EditorTemplates 下。

@model MyApp.Models.Property

<div class="label">@Model.Name</div>
<div class="input-block-level">@Html.TextBoxFor(model => Model.Value)</div>
<br/>

然后,将视图中的 foreach 循环替换为:

@EditorFor(model => model.Properties)
于 2013-07-19T20:14:53.230 回答