2012-11-14 49 views
0

我正在編寫我的第一個ASP.NET MVC應用程序,對我來說存在一個大問題。我想製作一個代表表單的控件,但是當我嘗試生成標籤和文本框時,它會返回給我空白頁面。Html.LabelFor和Html.TextBoxFor生成empy html代碼

所以,這是我的模型文件(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> 

因此,當我運行我的a應用結果是孤獨的標題:「這是我的控制測試!」並且生成的頁面上沒有標籤或文本框。 如果我檢查生成的頁面的源代碼,我可以看到我的塊,但它的內部文本是空的。 請你能幫我嗎?

回答

4

這些方法返回帶有生成的HTML代碼的字符串。
你沒有對返回值做任何事情。

您需要使用@標誌打印頁面上的返回值:

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

注意,因爲這些都不是聲明,不應該有一個;。在你的例子中,;是無害的(它被解析爲一個空的C#語句);如果它已經在HTML標籤中,它會將一個;打印到HTML源代碼中。

+1

你的代碼不適用於我,它會返回一個錯誤「需要分號」。但我想這是因爲我使用ASPxView引擎而不是Razor。我發現解決方案取決於你的代碼:<%= Html.LabelFor(m => m.Name)%> - 這對我很有用。謝謝! – Ceridan

+0

@Ceridan:你是對的;我曾以爲你在使用剃刀。固定。 – SLaks