使用 MVC3 创建和编辑字符串集合
本文关键字:字符串 集合 编辑 MVC3 创建 使用 | 更新日期: 2023-09-27 18:34:43
在理解如何使用表单创建和编辑字符串集合时遇到一些困难。我尝试过使用 EditorFor,但它似乎没有运气,而是将以下文本放入表单中。我正在尝试编辑集合"关键字"。
System.Collections.Generic.HashSet`1[MVCModuleStarter.Models.Module]System.Collections.Generic.HashSet`1[MVCModuleStarter.Models.Module]
这是我正在使用 EditorFor 的 Html,其中包含一个有效的 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; }
}
}
任何帮助都会很棒,对此还是新的!谢谢!
您需要为Keyword
创建一个EditorTemplate
,例如
在/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
,但如果您还想编辑它们,请为Modules
添加另一个EditorTemplate
或者,您可以在主视图中使用 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
}
}