Theory
વાતચીતમાં server ની બાજુ
દરેક page view એક ટૂંકી વાતચીત છે: browser એક request મોકલે છે અને server એક response મોકલે છે. તમે અત્યાર સુધી આ response જ બનાવતા આવ્યા છો (server controls એમાં જ render થાય છે), પણ ક્યારેક તમારા code ને browser સાથે સીધી વાત કરવી પડે છે, કોઈ ઝડપી સંદેશો મોકલવા માટે અથવા મુલાકાતીને બીજે ક્યાંક redirect કરવા માટે.
બરાબર આ જ કામ માટે ASP.NET તમને Response object આપે છે, એટલે કે આપલેનો બહાર જતો અડધો ભાગ. આ પાઠમાં જોઈશું કે તમારો server code browser સાથે વાત કરવા Response ને કઈ રીતે વાપરે છે, અને એનો અંદર આવતો સાથી Request શું કરે છે.
Theory
Response object
Response એટલે તમારો server browser ને પાછો મોકલી રહ્યો છે તે જવાબ. એના સૌથી ઉપયોગી members:
- Response.Write(text): લખાણ સીધું page ના output માં લખે છે.
- Response.Redirect(url): browser ને બીજા page પર જવાનું કહે છે.
- Response.Cookies: response સાથે cookies જોડે છે (browser માં સંઘરાતો નાનો data).
એનો સાથી છે Request, એટલે કે browser તરફથી અંદર આવતો data: Request.QueryString URL માંથી કિંમતો વાંચે છે, Request.Form મોકલાયેલાં form fields વાંચે છે, Request.Cookies browser એ મોકલેલી cookies વાંચે છે. Request અંદર આવે છે; Response બહાર જાય છે.
Practical
browser ને લખવું અને redirect કરવું
// Send text straight into the page
Response.Write("Welcome to FestConnect!");
// After a successful registration, send the student to a thank-you page
protected void btnRegister_Click(object sender, EventArgs e)
{
// ... save the registration ...
Response.Redirect("ThankYou.aspx"); // browser now requests ThankYou.aspx
}
// Read something the browser sent in (the incoming Request):
string eventId = Request.QueryString["eventId"]; // from a URL like ?eventId=12Formula
Request અંદર, Response બહાર
આ જોડી બરાબર યાદ રાખી લો. Request એટલે browser એ server ને મોકલેલું બધું: URL, query string, form fields, cookies. Response એટલે server પાછું મોકલે છે તે બધું: HTML, redirects, સંઘરવા માટેની cookies.
મુલાકાતી શું ઇચ્છે છે એ જાણવા તમારો code Request માંથી વાંચે છે, અને જવાબ આપવા Response માં લખે છે. દરેક ASP.NET page આ બેની વચ્ચે બેસે છે: એક બાજુ અંદર આવતો Request, બીજી બાજુ બહાર જતો Response.
Quiz
વિદ્યાર્થી registration કરી લે પછી તમે એના browser ને ThankYou.aspx પર લઈ જવા માગો છો. તમે Response નો કયો member વાપરશો?
- Response.Write("ThankYou.aspx"), જે એ page પર લઈ જાય છે
- Response.Redirect("ThankYou.aspx"), જે browser ને એ page માગવાનું કહે છે
- Request.QueryString["ThankYou.aspx"], જે એ page load કરે છે
- Response.Cookies, જે cookie વાપરીને redirect કરે છે
Show the answer
Response.Redirect("ThankYou.aspx"), જે browser ને એ page માગવાનું કહે છે
Response.Redirect(url) browser ને બીજું page માગવાનું કહે છે, અને મુલાકાતીને ThankYou.aspx પર લઈ જવાની બરાબર એ જ રીત છે. વિકલ્પ A ખોટો છે: Response.Write તો ચાલુ page પર ફક્ત 'ThankYou.aspx' એટલું લખાણ છાપે છે; એ ક્યાંય લઈ જતું નથી. વિકલ્પ C ખોટો છે: Request.QueryString URL માંથી અંદર આવતી કિંમતો વાંચે છે, એટલે એ અંદર આવતા Request નો ભાગ છે, browser ને ક્યાંક મોકલવાની રીત નહીં. વિકલ્પ D ખોટો છે: Response.Cookies browser માં નાનો data સંઘરે છે; એ redirection કરતું નથી. દિશા યાદ રાખો: browser ને નવા page પર મોકલવું હોય તો Response.Redirect વાપરો.
Think first
Thank-you લખાણ સીધું બતાવવાને બદલે redirect શા માટે કરવો?
તમે thank-you સંદેશો registration page પર જ બતાવી શકો. તો પછી એને બદલે અલગ page પર redirect શા માટે મોકલવો? વિચારીને પછી tap કરો.
Show the answer
મુખ્ય કારણ એ છે કે DOUBLE-SUBMIT ની સમસ્યા ટાળવી છે અને URL સાફ રાખવો છે. જો તમે registration સાચવીને પછી એ જ page પર (જ્યાં POST થી પહોંચાયું હતું) thank-you સંદેશો બતાવો, તો browser ને હજી પણ યાદ રહે છે કે એ અહીં form submit કરીને આવ્યું હતું. પછી વિદ્યાર્થી refresh કરે તો browser form ફરીથી submit કરે છે, એની બીજી વાર registration થઈ જાય છે, અને 'resend form data?' એવો ડરામણો પ્રશ્ન પણ દેખાય છે. સફળ સાચવણી પછી redirect કરવાથી (આ ઢબને Post-Redirect-Get કહે છે) આ સુધરી જાય છે: સાચવ્યા પછી તમે browser ને તાજા GET request સાથે ThankYou.aspx પર મોકલો છો, એટલે refresh કરવાથી નિર્દોષ thank-you page જ ફરી load થાય છે, form ફરી submit થતું નથી. વળી એથી મુલાકાતી form ના URL ને બદલે સમજદાર અને bookmark કરી શકાય એવા URL પર રહે છે. એટલે redirect કરવો ફક્ત દેખાવ પૂરતો નથી; એ ભૂલથી થતાં બેવડાં કામ અટકાવે છે અને navigation સાફ રાખે છે. સાચવો, પછી redirect કરો: રાખવા જેવી ટેવ.
Summary
Key takeaways
- દરેક page view એટલે એક Request (અંદર આવતો, browser તરફથી) અને એક Response (બહાર જતો, server તરફથી).
- Response object એ તમારો server code browser સાથે પાછું બોલવાની રીત છે.
- Response.Write page માં લખાણ મોકલે છે; Response.Redirect browser ને બીજા URL પર મોકલે છે; Response.Cookies browser માં data સંઘરે છે.
- એનો સાથી Request અંદર આવતો data વાંચે છે: Request.QueryString (URL ની કિંમતો), Request.Form (મોકલાયેલાં fields), Request.Cookies.
- મુલાકાતી શું ઇચ્છે છે એ જાણવા Request માંથી વાંચો; જવાબ આપવા Response માં લખો.
- સફળ કામ પછી redirect કરવાથી (Post-Redirect-Get) refresh વખતે બેવડું submit ટળે છે અને URL સાફ રહે છે.
- યાદ રાખવાની કડી: Request અંદર, Response બહાર.