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顯示為該參數指定字串值。