使用cookie执行SQL select
问题描述:
我想在我的.NET Razor应用程序中使用cookie来记住用户表单字段信息。使用cookie执行SQL select
用户第一次使用表单提交查询时,会将一个条目插入到数据库中,并为该条目创建一个GUID。然后,该GUID被保存为用户计算机上的cookie:
// Create Enquiry Cookie
HttpCookie myCookie = new HttpCookie("BookingReq");
myCookie.Value = bookingguid;
myCookie.Expires = DateTime.Now.AddYears(1);
Response.Cookies.Add(myCookie);
下一次用户进入到一个不同的属性页,我想使用GUID在Cookie中提取信息有关数据库的自己最后的请求,并用相同的信息填充表单。
首先我这样做:
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'语句,除非它绝对是最后的手段吗?
谢谢,加文
答
你变bref
范围是错误的。你在if块中声明它,这是它唯一可以使用的地方。此外,如果breq为空,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"
请让我们知道以什么方式“我不能够填充表单”。它会让它们变成空白吗?错误?此外,对于第一个第二块代码,这是在视图还是控制器? –
我实际上是在asp.net网页框架上构建它,所以视图和控制器之间没有真正的区别,但问题本质上是视图问题。表单中的@ breq.CustomerEmail值不是一个选项,因为该变量位于'if'语句中。如果我将它从'if'语句中取出,那么它是一个选项,但是我将删除逻辑以查看cookie是否不存在(通常不是这种情况)。 – Gavin5511