在理解如何使用表单创建和编辑字符串集合时遇到一些麻烦。我尝试过使用EditorFor,但它似乎没有运气,而是将以下文本放入表单中。我试图编辑集合"关键字"。
System.Collections.Generic.HashSet`1[MVCModuleStarter.Models.Module]System.Collections.Generic.HashSet`1[MVCModuleStarter.Models.Module]
这是Html我使用EditorFor和一个工作的EditorFor用于字符串以供参考。
<div class="form-group">
@Html.LabelFor(model => model.Category, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Category, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Category, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Keywords, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Keywords, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Keywords, "", new { @class = "text-danger" })
</div>
</div>
这是我控制器内的Edit方法;
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "ModuleId,ModuleTitle,ModuleLeader,ModuleDescription,ImageURL,Category,Keywords")] Module module)
{
if (ModelState.IsValid)
{
int moduleId = module.ModuleId;
repository.UpdateModule(module);
repository.Save();
return RedirectToAction("Details", new { Id = moduleId });
}
return View(module);
}
这是供参考的模型;
[Required, StringLength(20), Display(Name = "Category")]
public string Category { get; set; }
public virtual ICollection<Keyword> Keywords { get; set; }
关键字模型
public class Keyword
{
[Key, Display(Name = "ID")]
public int KeywordId { get; set; }
[Required, StringLength(100), Display(Name = "Keyword")]
public string KeywordTerm { get; set; }
public virtual ICollection<Module> Modules { get; set; }
}
}
任何帮助都会令人惊叹,对此仍然是新手!谢谢!
答案 0 :(得分:0)
您需要为EditorTemplate
创建Keyword
,例如
在/Views/Shared/EditorTemplates/Keyword.cshtml
中(根据需要添加div,类名等)
@model Keyword
@Html.HiddenFor(m => m.KeywordId)
@Html.LabelFor(m => m.KeywordTerm)
@Html.TextBoxFor(m => m.KeywordTerm)
@Html.ValidationMessageFor(m => m.KeywordTerm)
然后在主视图中
Html.EditorFor(m=> m.Keywords)
注意我已经省略了集合属性Modules
,但如果您还要编辑它们,请为EditorTemplate
添加另一个Modules
或者,您可以在主视图中使用for
循环。这意味着集合需要IList<T>
for(int i = 0; i < Model.Keywords.Count, i++)
{
@Html.HiddenFor(m => m.Keywords[i].KeywordId)
// other properties of Keyword
for (int j = 0; j < Model.Keywords[i].Modules.Count; j++)
{
@Html.TextBoxFor(m => m.Keywords[i].Modules[j].SomeProperty)
// other properties of Module
}
}