Html.LabelFor和Html.TextBoxFor生成空的html代码

时间:2012-11-14 16:57:05

标签: asp.net-mvc asp.net-mvc-3

我正在编写我的第一个ASP.NET MVC应用程序,对我来说有一个大问题。我想创建一个表示表单的控件,但是当我尝试生成标签和文本框时,它会返回给我空页。

所以,这是我的模型文件(MyModel.cs):

namespace MyNamespace.Models
{
  public class MyModel
  {
    [Required(ErrorMessage = "You have to fill this field")]
    [DisplayName("Input name")]
    public string Name{ get; set; }
  }
}

这是我的控件的MyFormControlView.ascx文件:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyNamespace.Models.MyModel>"%>
<div>
    <%
        using (Html.BeginForm())
        {
            Html.LabelFor(m => m.Name);
            Html.TextBoxFor(m => m.Name);
            Html.ValidationMessageFor(m => m.Name);
        }
    %>
</div>

这是我的Index.aspx文件,我在其中呈现控件:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Main.Master" Inherits="System.Web.Mvc.ViewPage<System.Collections.IEnumerable>" %>

<asp:Content runat="server" ID="MainContent" ContentPlaceHolderID="MainContent">
This is my control test!
<%Html.RenderPartial("MyFormControlView", new MyNamespace.Models.MyModel { Name = "MyTestName"}); %>
</asp:Content>

所以,当我运行我的应用程序时,结果是孤独的标题:“这是我的控制测试!”并且生成的页面上没有标签或文本框。 如果我检查生成的页面的源代码,我可以看到我的<div>块,但它的内部文本是空的。

1 个答案:

答案 0 :(得分:5)

这些方法使用生成的HTML代码返回字符串 你没有对他们的回报值做任何事情。

您需要使用@符号在页面上打印返回值:

<%= Html.LabelFor(m => m.Name) %>

请注意,由于这些不是陈述,因此不应该有;。在您的示例中,;是无害的(它被解析为空的C#语句);如果它在HTML标记内,它会向HTML源打印;