變數資料的存放位置
在資料的存放上,我們都知道依設計目的的不同,
資料可以存放在區域變數、全域變數,如果要永久存放則可以配合資料庫,
但在開發Web程式與桌面程式所要考慮的點是不一樣的,
同一個時間點,開發Web程式需要考慮多人正在操作,
反而桌面程式只需考慮一人。以下列出開發Web程式時,資料存放的方式。
一、配合資料庫
資料放在資料庫是一個設計通解,但建構複雜,如果設計目地只是暫存,
那設計成本就有點高。
二、使用靜態變數
例如要做一個簡單的來訪人數計數器
後端為
using System.Web.Mvc;
namespace WebApplication1.Controllers
{
public class HomeController : Controller
{
public static int count = 0;
public ActionResult Index()
{
count++;
return View(count);
}
}
}
前端為
<p>來訪人數:@Model</p>
被宣告static的count變數,就是暫存的靜態全域變數,
如果server端程式沒有被重新啟動,則每一位連接進來的使用者都會做計數動作。
但如果把static宣告拿掉時則會如何?
使用者每連接次到server端程式,將被視為new起一個process,
每一個process都會跑過一次Controller,由於count不是「static」,
所以使用者每連接一次,count變數就會被重設為 0 一次,
自然而然計數功能就失效了。
三、使用session或cookies
以session為例,如果暫存資料是不需要放在server端集中保管的話,
則可以利用session來將資料交由使用者各自保管以減輕server負擔。
後端
using System.Web.Mvc;
namespace WebApplication1.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
Session["login"] = "";
return View();
}
public ActionResult Login()
{
Session["login"] = Session.SessionID + " 已登入";
return Redirect("Contact");
}
public ActionResult Contact()
{
return View();
}
public ActionResult About()
{
return View();
}
}
}
前瑞
Index.cshtml
@Html.ActionLink("登入", "Login")
Contact.cshtml
@if ((string)Session["login"] == "")
{
@Html.ActionLink("登入", "Login")
}
else
{
<p>@((string)Session["login"])</p>
}
四、使用TempData
MVC裡的TempData也只是session技術的延伸,