2013-03-19 33 views
2

我已经设置了一个cookie,我想用它来填充表单,以便用户不需要填写相同的表单(它向别墅的所有者提交查询)。关于cookie的IF语句 - WebMatrix/Razor

如果cookie已设置,我已经可以正常工作,但如果没有设置cookie,则会出错。

我猜我需要使用“if”语句,但不太清楚如何编写代码。

下面是设置cookie的代码...

Response.Cookies["BookingEnquiry"]["ReqName"] = Request["BookingReqName"]; 
Response.Cookies["BookingEnquiry"]["ReqEmail"] = Request["BookingReqEmail"]; 
Response.Cookies["BookingEnquiry"]["ReqPhone"] = Request["BookingReqPhone"]; 
Response.Cookies["BookingEnquiry"]["NumAdults"] = Request["BookingNumAdults"]; 
Response.Cookies["BookingEnquiry"]["NumChildren"] = Request["BookingNumChildren"]; 
Response.Cookies["BookingEnquiry"]["ReqMessage"] = Request["BookingReqMessage"]; 
Response.Cookies["BookingEnquiry"].Expires = DateTime.Now.AddHours(4); 
} 

这里是从cookie收集信息的变量...

var reqname = Request.Cookies["BookingEnquiry"]["ReqName"]; 
var reqemail = Request.Cookies["BookingEnquiry"]["ReqEmail"]; 
var reqphone = Request.Cookies["BookingEnquiry"]["ReqPhone"]; 
var numadults = Request.Cookies["BookingEnquiry"]["NumAdults"]; 
var numchildren = Request.Cookies["BookingEnquiry"]["NumChildren"]; 
var reqmessage = Request.Cookies["BookingEnquiry"]["ReqMessage"]; 

,这里是从一个样本输入形式...

<label>Name</label> 
<input type="text" name="BookingReqName" id="BookingReqName" placeholder="full name…" value="@reqname"> 

任何帮助将不胜感激。

谢谢,加文

回答

2

在WebMatrix中C#.net的东西,我认为你正在寻找的东西是这样的:

if(Request["BookingReqName"] != null) 
{ 
    Response.Cookies["BookingEnquiry"]["ReqName"] = Request["BookingReqName"]; 
} 
else 
{ 
    Response.Cookies["BookingReqName"] = ""; //<--Whatever default value you want (I've used an empty string here, so you, at least, won't get a null reference error). 
} 

或者你可以使用相同的代码作为一行代码(不要混淆你的代码,但是t他会减少可读性,obv。)。

if(Request["BookingReqName"] != null){Response.Cookies["BookingEnquiry"]["ReqName"] = Request["BookingReqName"];}else{Response.Cookies["BookingReqName"] = ""; //<--Whatever default value you want (I've used an empty string here, so you, at least, won't get a null reference error).} 

您只需要为请求cookie值的所有行执行此操作。

问题是,任何可以在“else”块中进行的操作都可以帮助您处理cookie值被清除/过期(您必须始终期望)的操作。您可以重定向到一个页面,该页面向用户请求信息以重置任何“已忘记”的配置,或者,无论如何,如果要保留数据,请考虑将这些值存储在数据库中,因为这些值不会清除/到期。

最后一两件事,如果这并不能帮助:

如果你发现自己想在cookie(默认值要指定)存储什么价值,因为你要知道,当时的权利在那里,它应该记住的是什么,那么恐怕现在是时候重新考虑你如何构建数据流。

很抱歉,但我已经做了,曾几何时,只能用Session变量,这是不漂亮:)

如果您需要之间传输数据的最佳方式(一个或多个)任何帮助网页,检查这个从迈克布林德的网站非常有用,简洁的链接:http://www.mikesdotnetting.com/Article/192/Transferring-Data-Between-ASP.NET-Web-Pages

0

这应该只是以下

if(Request.Cookies["BookingEnquiry"] == null) 
    { 
    return; // <- if BookingEnquiry is null we end this routine 
    } 

    // Normal code flow here... 

或类似

+0

这里是我得到的错误。它的意思是“var reqname = Request.Cookies [”BookingEnquiry“] [”ReqName“]; - 未设置对象引用 – Gavin5511 2013-03-19 14:56:17

+0

Daniel,代码的”else“部分是什么样子? – Gavin5511 2013-03-19 15:21:12

+0

当您检查变量Request.Cookies [“BookingEnquiry”]为null并返回时,如果它为空,则没有别的,您只需在本节下面继续使用正常代码。 (如果它为空,那么您将跳过出现错误的代码部分) - 请参阅编辑。 – 2013-03-19 21:54:15