2015-04-07 52 views
1

我想在我的.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'语句,除非它绝对是最后的手段吗?

谢谢,加文

+0

请让我们知道以什么方式“我不能够填充表单”。它会让它们变成空白吗?错误?此外,对于第一个第二块代码,这是在视图还是控制器? –

+0

我实际上是在asp.net网页框架上构建它,所以视图和控制器之间没有真正的区别,但问题本质上是视图问题。表单中的@ breq.CustomerEmail值不是一个选项,因为该变量位于'if'语句中。如果我将它从'if'语句中取出,那么它是一个选项,但是我将删除逻辑以查看cookie是否不存在(通常不是这种情况)。 – Gavin5511

回答

2

你变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"

+0

是有道理的!给我半小时,我会付诸行动;) – Gavin5511

+0

感谢您的帮助,非常感谢 – Gavin5511