使用webmatrix / razor阅读复选框

时间:2013-09-03 15:32:21

标签: sql razor webmatrix

我的网站上的复选框出现问题。

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

@{
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”,以便发布到数据库中。

1 个答案:

答案 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集合中,然后相应地设置要提交给数据库的值。如果您要传递truefalse,具体取决于是否选中了复选框,则可以执行以下操作:

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