【发布时间】:2014-09-14 04:28:28
【问题描述】:
我正在使用 WebMatrix 3.0 和 SQL CE 创建一个 .cshtml 网络表单。
问题:我有一个复选框列表,这些复选框是通过查询表中的所有记录动态创建的。对于每个具有值 ID 的复选框,只有当值 ID 对应于另一个表中的一行时,我才想设置 checked="checked" 。
更多细节: 我有一个数据库,其中包含两个基本数据表(“person”和“socialMedia”)和第三个表(“persMedia”)。 “persMedia”表的存在是为了管理“person”和“socialMedia”之间的多对多关系。表“person”有一个名为 ID 的主键。表“socialMedia”也有一个名为 ID 的主键。表“persMedia”有两列名为 personID 和 siteID。假设一个人列在 ID=1 的“人”表中。假设该人在“socialMedia”表中列出了两个社交媒体帐户,ID 值为 4 和 7。在这种情况下,“persMedia”表中将有两行 personID 和 siteID 值为 1,4 和 1, 7.
我正在创建一个从 URL 请求 id 值的表单。然后,我在“person”表中查询主键等于 id 值的行。然后,我创建一个复选框列表。 “socialMedia”表中的每条记录都有一个复选框。因此,每个复选框都有 name="socialM" 和 value="@social.ID"。到目前为止,一切顺利。
这就是问题所在。对于每个复选框,如果“persMedia”表中有一行的 personID 记录等于 id 且 siteID 值等于@social.ID,我想将选中的属性设置为“checked”。我该怎么做呢?我尝试了以下代码的几种变体。
var id=Request["id"];
var SQLSELECT = "SELECT * FROM person WHERE @0=ID";
var db = Database.Open("mydatabase");
var person = db.QuerySingle(SQLSELECT,id);
var getSocMedia = db.Query("SELECT ID, site FROM socialMedia");
var getPersMedia = db.Query("SELECT personID FROM persMedia");
下面的这些行创建一个复选框列表,默认情况下没有选中任何复选框。
<p>Accounts:</p>
@foreach(var socialM in getSocMedia){
<input type="checkbox" name="social" value="@socialM.ID" />@socialM.site<br />
}
当我修改上面的行时,为了尝试根据具有多对多关系的表的查询来检查一些框,这就是我想出的。
<p>Accounts:</p>
@foreach(var socialM in getSocMedia){
<input type="checkbox" name="social" value="@socialM.ID" checked=@foreach(var persmed in getPersMedia){if(persmed.personID != null){"checked";}}>@socialM.site<br />
}
我收到的错误是“只有赋值、调用、递增、递减、等待和新对象表达式可以用作语句。”我尝试了几种变体并收到了其他几个错误。底线:如何在动态创建的复选框列表中设置选中的值?
【问题讨论】:
标签: razor checkbox sql-server-ce webmatrix