使用cookie执行SQL select

时间:2015-04-07 11:08:04

标签: sql .net razor cookies webmatrix

我正在尝试在我的.NET Razor应用程序中使用cookie来记住用户表单字段信息。

用户第一次使用表单提交查询时,会在数据库中插入一个条目,并为该条目创建GUID。然后将此GUID保存为用户计算机上的cookie:

// Create Enquiry Cookie
HttpCookie myCookie = new HttpCookie("BookingReq");
myCookie.Value = bookingguid;
myCookie.Expires = DateTime.Now.AddYears(1);
Response.Cookies.Add(myCookie);

下次用户访问不同的属性页时,我想使用cookie中的GUID从数据库中提取有关其上一个请求的信息,并使用相同的信息填充表单。

首先我这样做:

if(Request.Cookies["BookingReq"] != null){
    var breq = db.Query("SELECT * FROM BookingRequests WHERE BookingGUID = @0", Request.Cookies["BookingReq"].Value);
}

理论上,这应该可行,但我无法使用传统方法填充表单:

<div class="form-group">
    <label for="customerName">Your Name</label>
        <input type="text" value="@breq.CustomerName" class="form-control" id="customerName" name="customerName">
</div>
<div class="form-group">
    <label for="customerEmail">Email address</label>
        <input class="form-control" value="@breq.CustomerEmail" id="customerEmail" name="customerEmail">
</div>

我猜这是因为你不能在'if'语句中调用变量?我有什么选择?

我不想为每个表单字段执行'if'语句,除非它绝对是最后的手段?

谢谢,加文

1 个答案:

答案 0 :(得分:2)

变量bref的范围是错误的。您在if块中声明它,这是唯一可以使用它的地方。此外,如果breq为null,breq.CustomerName将失败。所以修复就像是

var customerName = "";
var customerEmail = "";
if (Request.Cookies["BookingReq"] != null) {
    var breq = db.Query("SELECT * FROM BookingRequests WHERE BookingGUID = @0", Request.Cookies["BookingReq"].Value);
    //I don't know webmatrix so I don't know what happens to breq if that value doesn't exist - I'll assume it's null
    if (breq != null) {
        customerName = breq.CustomerName;
        customerEmail = breq.CustomerEmail;
    }
}

然后在控件中,您可以使用value="@customerName"value="@customerEmail"