我的数据库中有三个表:页面,标记和 Joiner
我的实体看起来像这样(缩写)......
public class Page
{
public int PageId { get; private set; }
public string Title { get; set; }
public string Body { get; set; }
public List<Tag> Tags { get; set; }
}
public class Tag
{
public int TagId { get; private set; }
public string Name{ get; set; }
}
每个页面可以包含任意数量的标签,每个标签可以应用于任意数量的页面,因此 Joiner 表用于多对多关系。
在Pages控制器的Edit视图中,我希望用户能够更新标题和正文,并以复选框列表的形式从标签表中选择任何标签< / strong>即可。
例如,如果标签表中存在10个标签,而当前页面在Page.Tags中有两个标签,则会显示10个复选框,其中两个标签被勾选。然后,用户可以更改选择并保存页面,并且将更新joiner表。
最好的方法是什么?我对数据库更新代码感到满意,这是我不确定的View代码。
答案 0 :(得分:2)
你可以尝试这样的事情:
首先,定义一个这样的viewmodel:
public class PageViewModel
{
public Page pageToEdit{get;set;}
public IEnumerable<Tag> Tags {get;set;}
}
然后,在您的控制器中
public ActionResult Edit(int id)
{
PageViewModel model = new PageViewModel();
model.Tags = yourRepository.SelectTags();
model.PageToEdit = yourRepository.SelectPage(id);
return this.View(model);
}
视图中的继承ViewPage<PageViewModel>
内容必须像这样说:
<% using(Html.BeginForm()){ %>
[...]
<%
foreach(Tag tag in Model.Tags)
{
Response.Write(Html.CheckBox("tagId_"+tag.TagId,Model.PageToEdit.Tags.Select(t=>t.TagId).Contains(tag.Tagid));
}
%>
[...]
<% } %>