TextBoxFor、TextBox的用法

 

一、TextBox

1、

public static MvcHtmlString TextBox(
    this HtmlHelper htmlHelper,
    string name
)

前端為

@Html.TextBox("myName")

結果為

由結果可看出指定參數name,也就是指定id與name的值。

 

2、

public static MvcHtmlString TextBox(
    this HtmlHelper htmlHelper,
    string name,
    object value
)

前端為

@Html.TextBox("myName", "This is text")

結果為

由結果可看出指定參數value,就是指定該元素內含值。

 

3、

public static MvcHtmlString TextBox(
    this HtmlHelper htmlHelper,
    string name,
    object value,
    IDictionary<string, object> htmlAttributes
)

不舉例。

 

4、

public static MvcHtmlString TextBox(
    this HtmlHelper htmlHelper,
    string name,
    object value,
    object htmlAttributes
)

前端為

@Html.TextBox("myName", "This is text", new { @class = "form-control" })

結果為

由結果可看出指定參數htmlAttributes,就是指定該元素屬性與屬性值,

此例為指定class值為form-control。

 

5、

public static MvcHtmlString TextBox(
    this HtmlHelper htmlHelper,
    string name,
    object value,
    string format
)

前端為

@Html.TextBox("myName", 1000, "{0:d6}")

結果為

由結果可看出指定參數format,就是指定該元素值的格式,

格式的寫法請參考標準數值格式字串簡述

 

6、

public static MvcHtmlString TextBox(
    this HtmlHelper htmlHelper,
    string name,
    object value,
    string format,
    IDictionary<string, object> htmlAttributes
)

不舉例。

 

7、

public static MvcHtmlString TextBox(
    this HtmlHelper htmlHelper,
    string name,
    object value,
    string format,
    object htmlAttributes
)

不舉例。

 

二、TextBoxFor

1、

public static MvcHtmlString TextBoxFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression
)

不舉例。

 

2、

public static MvcHtmlString TextBoxFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression,
    IDictionary<string, object> htmlAttributes
)

不舉例。

 

3、

public static MvcHtmlString TextBoxFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression,
    object htmlAttributes
)

不舉例。

 

4、

public static MvcHtmlString TextBoxFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression,
    string format
)

不舉例。

 

5、

public static MvcHtmlString TextBoxFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression,
    string format,
    IDictionary<string, object> htmlAttributes
)

不舉例。

 

6、

public static MvcHtmlString TextBoxFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression,
    string format,
    object htmlAttributes
)

不舉例。

 

額外一提,之前用慣了EditorFor方法,但遇到了特殊問題卻不知道要怎麼解,重現問題如下。

Model為

namespace WebApplication1.Models
{
    using System.Web;

    public partial class Photo
    {
        public HttpPostedFileBase file { get; set; }
    }
}

 

Controller為

using System.Web.Mvc;
using WebApplication1.Models;

namespace WebApplication1.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            Photo p = new Photo();

            return View(p);
        }
    }
}

 

View為

@model WebApplication1.Models.Photo

@Html.EditorFor(m => m.file,new { htmlAttributes = new { type = "file", accept = "image/*", @class = "form-control" } })

<hr />

@Html.TextBoxFor(m => m.file, new { type = "file", accept = "image/*", @class = "form-control" })

 

你會發現,之前使用表單上傳時常常使用scaffolding一下子就產生出一系列的EditorFor方法,

但現在網站要做架構變動時(表單上傳也要上傳圖片檔案時),繼續使用EditorFor方法卻不靈了。

如下圖紅框處

要上傳一個檔案反而出現三個上傳欄位,

這時就應該使用TextBoxFor方法就正常了,結果如下藍框處。

結論:

雖然使用EditorTemplates做表單上傳很快,但遇到特殊問題時,

還是需要使用InputExtensions.TextBoxFor方法較好解決問題。

 

參考資料:

InputExtensions.TextBox Method

InputExtensions.TextBoxFor Method

EditorFor、DisplayNameFor、DisplayFor的使用