2013-03-19 65 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