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