将FirstName从模型返回到View中的标签

时间:2014-08-14 19:42:51

标签: c# html asp.net-mvc razor

我正在尝试将用户输入的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; }
    }
}

1 个答案:

答案 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的结果与直接输出属性相同,除非您已创建自定义模板。