LabelFor
LabelFor是用來顯示DadaBinding過來的屬性名稱,
LabelFor有六種多載方法,請參考以下範例,
由於用法類似所以只會舉主要例子。
public static MvcHtmlString LabelFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression
)
Model為
namespace WebApplication1.Models
{
public class PERSON
{
public int no { get; set; }
public string name { get; set; }
public string cell { get; set; }
public PERSON() { }
}
}
Controller為
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using WebApplication1.Models;
namespace WebApplication1.Controllers
{
public class HomeController : Controller
{
public static List<PERSON> PERSON = new List<PERSON>();
public ActionResult Index()
{
PERSON.Add(new PERSON() { no = 1, name = "Tim", cell = "0933486757" });
return View(PERSON);
}
}
}
View為
@using WebApplication1.Models
@model List<PERSON>
@Html.LabelFor(a => a.FirstOrDefault().no)
請看View裡的黃色部份,並不是都固定這樣寫的。
List<PERSON>是因為後端傳List<PERSON>型態的資料所以才於前端宣告使用List<PERSON>來接資料;
而lambda運算式是針對List<PERSON>型別的集合做操作,
LabelFor方法會針對該筆資料傳回該資料的屬性名稱而非屬性值,這還蠻特別的。
最後來看另一種寫法,View改為
@using WebApplication1.Models
@model IEnumerable<PERSON>
@Html.LabelFor(a => a.FirstOrDefault().no)
於View使用IEnumerable<PERSON>來接資料這也是可以的,
因為IEnumerable是List的父類別。
public static MvcHtmlString LabelFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression,
IDictionary<string, Object> htmlAttributes
)
public static MvcHtmlString LabelFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression,
Object htmlAttributes
)
承第一項範例,於View改為
@using WebApplication1.Models
@model IEnumerable<PERSON>
@Html.LabelFor(a => a.FirstOrDefault().no, new { @class = "myClass" })
結果將會添加名為myClass類別
public static MvcHtmlString LabelFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression,
string labelText
)
public static MvcHtmlString LabelFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression,
string labelText,
IDictionary<string, Object> htmlAttributes
)
public static MvcHtmlString LabelFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression,
string labelText,
Object htmlAttributes
)
承上一範例,於View改為
@using WebApplication1.Models
@model IEnumerable<PERSON>
@Html.LabelFor(a => a.FirstOrDefault().no, "serial number", new { @class = "myClass" })
由此可知,labelText參數是強制將label元素的context顯示為該參數指定字串值。