- 用戶端與應用程序接口,簡單的說就是User Interface的部分,就像視窗程式的Container裝載很多控制項。又如網站的HTML裝載很多網頁控制元件。
- 不同的Activity之間的資料傳遞則是透過Intent傳輸。
- 後台的運行,一般不與用戶端交互,因此沒有圖形介面,通常是用來為其他組件提供後台服務或監控其他組件的運行狀態。
- 將某個應用程式的指定數據集提供給其他應用程式,其他應用可以通過ContentResolver類從該內容提供者中獲取或存入數據,也就是不同應用程序之間的數據傳遞,實現數據共享。
- 允許APP接受系統傳來的外部資訊,並喚起APP做出回應。譬如系統本身的低電量則關閉螢幕機制;文件以下載完成,可以啟動其他APP開啟等。
QueryString
- 在網址後加上參數名稱和參數值
- ?name1=value1&name2=value2&...
Form表單
- 透過form及submit將form裡的參數送至controller,處理少量參數
- 範例:
Action:
public ActionResult ModelBind(string name)
{
ViewBag.Name=name;
return View();
}
View :
<form action="/cont/ModelBind" method="post">
Name:<input type="text" name="name"/>
<input type="submit" value="Submit" />
</form>
<p>Your Name : @ViewBag.Name</p>
- FormCollection類別,處理傳遞多個參數
- 範例:
Action:
public ActionResult ModelBind(FormCollection form)
{
ViewBag.Name=form["name"];
ViewBag.Age=form["age"];
return View();
}
View :
<div>
@using(Html.BeginForm()){
Name:<input type="text" name="name"/><br/>
Age: <input type="text" name="age"/><br/>
<input type="submit" value="Submit" />
}
</div>
<p>
Your Name : @ViewBag.Name<br/>
Your Name : @ViewBag.Age
</p>
RouteData
- 透過路由範本取得參數值
- /{Controller}/{Action}/{id}
JSON
Model:
public class Person
{
public string id {get;set;}
public string name {get;set;}
public string email {get;set;}
}
Action:
[HttpPost]
public ActionResult ExJson(Person[] p)
{
return Json(p, JsonRequestBehavior,AllowGet);
}
多個Model(物件)
- 透過LINQ的Include方法與Lambda Expression將相關聯的資料(關聯資料表),由多個物件封裝成一個
- 範例:
Action:
public ActionResult ExInclude()
{
var courses = db.Courses
.Include(c=>c.Students)
.Include(c=>c.Schedule)
return View(courses.ToList());
}
View:
@model IEnumerable<Courses>
<!--標題-->
<tr>
<th>@Html.DisplayNameFor(model=>model.courseName)</th><th>@Html.DisplayNameFor(model=>model.Students.studentID)</th><th>@Html.DisplayNameFor(model=>model.Schedule.classTime)</th>
</tr>
<!--內容-->
@foreach(var item in Model){
<tr>
<td>@Html.DisplayFor(modelItem=>model.courseName)</td><td>@Html.DisplayFor(modelItem=>model.Students.studentID)</td><td>@Html.DisplayFor(modelItem=>model.Schedule.classTime)</td>
</tr>
}
ViewModel
- 專門給View使用的Model物件資料
- 可以將無相關聯的資料封裝成一個
- 將所需的多個物件透過一層Class進行屬性封裝
- 新增ViewModels目錄,通常放在Models目錄之下
- 範例:
Class:
public class Books
{
public string bookID {get;set;}
public string bookName {get;set;}
public IEnumerable<Order> Order {get;set;}
}
public class Order
{
public string orderNo {get;set;}
public string orderDate {get;set;}
public string orderNumber {get;set;}
}
Action:
public ActionResult ExViewModel()
{
List<Order> orders = new List<Order>();
orders.Add(new Order
{
orderNo="0001",
orderDate="2017-04-26",
orderNumber=2
});
orders.Add(new Order
{
orderNo="0002",
orderDate="2017-04-27",
orderNumber=3
});
Books books = new Books();
books.bookID = "A123456";
books.bookName = "MVC WOW";
books.Order = orders;
return View(books);
}
View:
@model Books
Book ID: @model.bookID
Book Name: @model.bookName
Order:
<table>
<tr>
<th>Order NO</th>
<th>Order Date</th>
<th>Order Number</th>
</tr>
@foreach(var item in model.Order)
{
<tr>
<td>item.orderNO</td>
<td>item.orderDate</td>
<td>item.orderNumber</td>
</tr>
}
</table>
JSON
- 使用JavaScriptSerializer類別進行序列化工作,回傳時會設置ContentType為application/json
- 範例:
Model:
public class Person
{
public string id {get;set;}
public string name {get;set;}
public string email {get;set;}
}
Action:
public ActionResult ExJson()
{
Person person = new Person{ id="A001", name="isabella",email="a@b.c"};
return Json(person, JsonRequestBehavior,AllowGet);
}
ViewData
public class ViewDataDictionary : IDictionary<string, object>()
- key必須是字串,內容可儲存任何物件資料 。
- 無法跨Action方法存取,只能存在於此次HTTP Request中。
- 範例:
Action:
public ActionResult ExViewData()
{
//Key: Name, data: Isabella
ViewData["Name"] = "Isabella";
return View();
}
View:
<h2>ExViewData</h2>
Name: @ViewData["Name"]
ViewBag
- dynamic型別
- 略過編譯時期靜態型別檢查,改在執行階段進行,大部分行為就像object型別一樣。
- 效能會比ViewData差一點點。
- 無法跨Action方法存取,只能存在於此次HTTP Request中。
- 範例:
Action:
public ActionResult ExViewBag()
{
//Key: Name, data: Isabella
ViewBag.Name = "Isabella";
return View();
}
View:
<h2>ExViewBag</h2>
Name: @ViewBag.Name
TempData
public class TempDataDictionary : IDictionary<string, object>()
- 將資料放在Session之中,所以具有跨Action、Controller存取的能力。
- 一旦資料被取出,就會被刪除,若不想被刪除的話需要用keep()將資料保存。
TempData.Keep();
第一個Controller:
public class FirstController : Controller
{
// GET: First
public ActionResult Index()
{
TempData["Name"] = "Isabella";
return new RedirectResult(@"~\Second\");//轉到第二個Controller
}
}
第二個Controller:
public class SecondController : Controller
{
// GET: Second
public ActionResult Index()
{
return View();
}
}
第二個Controller的View:
<h2>ExTempData</h2>
Name: @TempData["Name"]