使用ASP.Net MVC视图中的复选框列表

时间:2010-02-11 20:28:13

标签: asp.net-mvc

我的数据库中有三个表:页面标记 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代码。

1 个答案:

答案 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));
}
%>
[...]
<% } %>