2

我的网站上的复选框有问题。

这是我到目前为止的代码:

@{
Layout = "~/_SiteLayout.cshtml";

WebSecurity.RequireAuthenticatedUser(); 

var db = Database.Open("StayInFlorida");

var rPropertyId = Request.QueryString["PropertyID"];

var Propertyinfo = "SELECT * FROM PropertyInfo WHERE PropertyID=@0";
var qPropertyinfo = db.QuerySingle(Propertyinfo, rPropertyId);

if(IsPost){
var sql = "INSERT INTO PropertyInfo (FePool, FeJac, FeGames) VALUES (@0, @1, @2) WHERE PropertyID=@3";
db.Execute(sql, Request["check1"], Request["check2"], Request["check3"], rPropertyId);
}
}

<form method="post">

<div>
<input type="checkbox" name="check1" value="true"  /> 
  Value 1
<br/>
<input type="checkbox" name="check2" value="check2" /> 
  Value 2
<br/>
<input type="checkbox" name="check3" value="check3" /> 
  Value 3
<br/>


<div>
<input type="submit" name="buttonSubmit" value="Submit" />
</div>
</form>

我需要做的是检查数据库中的 3 列,看看它们是否设置为 true(这些列设置为“位”)。如果是,那么我希望复选框显示为选中状态。我还希望能够切换这些复选框并使用表单发布“true”或“false”,以发布到数据库中。

4

1 回答 1

1

您的陈述中有一个没有意义的WHERE子句。INSERT如果要插入,则创建一个新行。我怀疑您打算UPDATE使用现有行,在这种情况下您的 SQL 应该是:

"UPDATE PropertyInfo SET FePool = @0, FeJac= @1, FeGames = @2 WHERE PropertyID=@3"

如果未选中复选框,则 Request.Form 集合中不会包含该复选框的任何内容。如果选中,则传递的值默认为“on”,或者您在“value”属性中指定的任何值。对于 check1,这将是“真实的”。对于 check2,这将是“check2”。您需要确定复选框是否实际包含在 Request.Form 集合中,然后相应地设置要提交到数据库的值。如果你想通过true或者false取决于复选框是否被选中,你可以这样做:

var c1 = !Request["check1"].IsEmpty();
var c2 = !Request["check2"].IsEmpty();
var c3 = !Request["check3"].IsEmpty();
var sql = "UPDATE PropertyInfo SET FePool = @0, FeJac= @1, FeGames = @2 WHERE PropertyID=@3";
db.Execute(sql, c1,c2,c3,rPropertyInfo);

现在您有了一系列布尔值,您可以使用它们来确定复选框是否被选中,方法是使用Conditional Attributes

<input type="checkbox" name="check1" checked="@c1" /> Value 1<br/>
<input type="checkbox" name="check2" checked="@c2" /> Value 2<br/>
<input type="checkbox" name="check3" checked="@c3" /> Value 3<br/>

如果要从查询中预设复选框的值,请在 IsPost 块之前执行此操作:

var rPropertyId = Request.QueryString["PropertyID"];
var Propertyinfo = "SELECT * FROM PropertyInfo WHERE PropertyID=@0";
var qPropertyinfo = db.QuerySingle(Propertyinfo, rPropertyId);
bool c1 = qPropertyinfo.FePool;
bool c2 = qPropertyinfo.FeJac;
bool c3 = qPropertyinfo.FeGames;

显然你现在不需要在IsPost 块var中的变量前面。c1 - c3

于 2013-09-04T05:41:16.167 回答