使用webmatrix / razor阅读复选框

问题描述 投票:2回答:1

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

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

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

sql razor webmatrix
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集合中,然后相应地设置要提交给数据库的值。如果你想通过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

© www.soinside.com 2019 - 2024. All rights reserved.