我正在尝试将用户输入的FirstName渲染为视图中的标签。我试过......
@Html.DisplayFor(c => c.FirstName)
@Html.LabelFor(c => c.FirstName)
@Html.DisplayNameFor(c => c.FirstName)
最好的方法是什么?看似简单,我显然缺少一些东西?使用第二个,我得到的是变量名,而不是值。
控制器代码:
namespace TestProject.Controllers
{
public class ContactsController : Controller
{
[HttpGet]
public ActionResult Index()
{
Contact contact = new Contact();
return View(contact);
}
}
}
查看代码:
@model TestProject.Models.Contact
@{
ViewBag.Title = "ContactSuccess";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Contact Has Been Successfully Added</h2>
<div class="imgContainer">
<img src="~/Content/Images/checkmark" />
</div>
@model.FirstName
型号代码:
namespace TestProject.Models
{
public class Contact
{
[Required]
[DisplayFormat(ConvertEmptyStringToNull = false)]
[StringLength(20, MinimumLength = 2, ErrorMessage = "Enter A Valid First Name")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Enter A Valid Last Name")]
[DisplayFormat(ConvertEmptyStringToNull = false)]
[StringLength(20, MinimumLength = 2)]
public string LastName { get; set; }
[Required(ErrorMessage = "Enter A Valid Home Phone Number including area code")]
[DataType(DataType.PhoneNumber)]
public string PhoneHome { get; set; }
[Required(ErrorMessage = "Enter A Valid Cell Phone Number")]
[DataType(DataType.PhoneNumber)]
public string PhoneCell { get; set; }
[Required(ErrorMessage = "Enter A Valid Email Address")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
[Required(ErrorMessage = "Enter A Valid Street Address")]
[DisplayFormat(ConvertEmptyStringToNull = false)]
[StringLength(120, MinimumLength = 4)]
public string Address { get; set; }
[Required(ErrorMessage = "Enter A Valid City Name")]
[DisplayFormat(ConvertEmptyStringToNull = false)]
[StringLength(30, MinimumLength = 2)]
public string City { get; set; }
[Required(ErrorMessage = "Enter A Valid State Abbreviation")]
[DisplayFormat(ConvertEmptyStringToNull = false)]
[StringLength(20, MinimumLength = 2)]
public string State { get; set; }
[Required(ErrorMessage = "Enter A Valid 5 Digit Zip Code")]
[DataType(DataType.PostalCode)]
public string ZipCode { get; set; }
}
}
答案 0 :(得分:2)
@Html.DisplayFor(m => m.Foo)
如果不存在适当的模板,则输出适当显示模板的渲染结果,或输出属性值作为字符串。虽然显示模板可能包含将呈现给页面的HTML,但它本身不生成HTML。
@Html.LabelFor(m => m.Foo)
生成<label>
标记,其中for
属性设置为将为该属性生成的HTML ID,其内容与从Html.DisplayNameFor
获得的内容相同。
@Html.DisplayNameFor(m => m.Foo)
返回属性的显示名称(即假设您的属性附加了属性[Display(Name = "My Awesome Foo")]
,将输出“My Awesome Foo”)或属性名称“Foo”。 / p>
-
因此,假设您需要<label>First Name</label>
之类的内容,那么您需要Html.LabelFor
。如果你正在谈论像<label>Bob</label>
这样的话。对此没有任何帮助。你必须真正使用:
<label>@Html.DisplayFor(m => m.FirstName)</label>
或更简单,只是:
<label>@Model.FirstName</label>
使用Html.DisplayFor
的唯一原因是,您希望应用某种格式,例如DateTime
属性,或者您希望使用默认或自定义显示模板。对于string
类型,没有默认的显示模板,因此Html.DisplayFor
的结果与直接输出属性相同,除非您已创建自定义模板。