【问题标题】:Reading checkboxes using webmatrix/razor使用 webmatrix/razor 读取复选框
【发布时间】:2013-09-06 21:57:36
【问题描述】:

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

这是我目前的代码:

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

【问题讨论】:

    标签: sql razor webmatrix


    【解决方案1】:

    您的INSERT 语句中有一个WHERE 子句,这是没有意义的。如果要插入,则创建一个新行。我怀疑你打算 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 块中的 c1 - c3 变量前面不需要 var

    【讨论】:

    • 感谢迈克,这很完美,是的,我试图更新,而不是插入。那里有点注意力不集中。所以现在我可以勾选这些框并将“true”插入数据库,我如何检查第一次加载页面时是否应该勾选一个框?我假设某种@if 语句连接到每个复选框?
    • 但是该方法不会查询数据库来检查它的值是否设置为“true”吗?
    • 没有。您必须自己添加该代码并根据查询结果设置 c1 等的值。
    • 好的,所以在上面的代码中,我已经运行了查询以从数据库中获取该信息(qpropertyinfo),但是如何设置 c1 等的值?会是@if 语句吗?
    • 嗨,迈克,您对此有任何反馈吗?正如我所说,它现在工作了一半,这很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 2013-04-02
    • 1970-01-01
    • 2011-04-28
    • 2011-07-17
    • 2012-11-28
    相关资源
    最近更新 更多