Asp.net mvc 在ASP.NETMVC视图中使用复选框列表

Asp.net mvc 在ASP.NETMVC视图中使用复选框列表,asp.net-mvc,Asp.net Mvc,我的数据库中有三个表:页面、标签和加入者 我的实体看起来像这样(缩写) 公共类页面 { public int PageId{get;private set;} 公共字符串标题{get;set;} 公共字符串体{get;set;} 公共列表标记{get;set;} } 公共类标签 { public int TagId{get;private set;} 公共字符串名称{get;set;} } 每个页面可以有任意数量的标记,并且每个标记可以应用于任意数量的页面,因此

我的数据库中有三个表:页面标签加入者

我的实体看起来像这样(缩写)

公共类页面
{        
public int PageId{get;private set;}
公共字符串标题{get;set;}
公共字符串体{get;set;}
公共列表标记{get;set;}
}
公共类标签
{        
public int TagId{get;private set;}
公共字符串名称{get;set;}
}
每个页面可以有任意数量的标记,并且每个标记可以应用于任意数量的页面,因此多对多关系的Joiner

在页面控制器的编辑视图中,我希望用户能够更新标题和正文,并以复选框列表的形式从标记表中选择任何标记

例如,如果tags表中存在十个标记,而当前页面在page.tags中有两个标记,则将显示十个复选框,其中两个复选框被勾选。然后,用户可以更改选择并保存页面,joiner表将得到更新


最好的方法是什么?我对数据库更新代码很满意,这是我不确定的视图代码。

您可以尝试类似的方法:

首先,定义如下所示的viewmodel:

public class PageViewModel
{
    public Page pageToEdit{get;set;}
    public IEnumerable<Tag> Tags {get;set;}
}
<% 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));
}
%>
[...]
<% } %>
在您的视图中继承
ViewPage
内容必须如下所示:

public class PageViewModel
{
    public Page pageToEdit{get;set;}
    public IEnumerable<Tag> Tags {get;set;}
}
<% 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));
}
%>
[...]
<% } %>

[...] 
t、 包含(tag.TagId));
}
%>
[...]

看起来很棒,谢谢。我没有想过要创造一个新的班级——好主意。这是一种常见的技术吗?是的,它是常见的:如果你需要的产品将涉及多个类别(多对多),在这种情况下,你需要获得ID,而不是真/假,那么我该怎么做?