我的网站上的复选框出现问题。
这是我到目前为止的代码:
@{
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(列设置为“bit”)。如果是,那么我希望复选框显示为已选中。我还希望能够切换这些复选框并使用表单发布“true”或“false”,以便发布到数据库中。
答案 0 :(得分: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
。