如果声明为cookie - WebMatrix / Razor

时间:2013-03-19 14:49:32

标签: cookies razor webmatrix setcookie

我已经设置了一个我想用来填充表单的cookie,这样用户就不需要继续填写相同的表单(它正在向度假别墅的所有者提交查询)。

如果已经设置了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 个答案:

答案 0 :(得分: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).
}

或者你可以使用相同的代码作为单行代码(不要弄乱你的代码,但是这会降低可读性,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变量,并且它不漂亮:)

如果您需要任何有关在网页之间传输数据的最佳方式的帮助,请查看Mike Brind网站上非常有用的简明链接:http://www.mikesdotnetting.com/Article/192/Transferring-Data-Between-ASP.NET-Web-Pages

答案 1 :(得分:0)

应该是以下

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

   // Normal code flow here...

或类似的东西