0

私は最初のASP.NETMVCアプリケーションを作成していますが、大きな問題が1つあります。フォームを表すコントロールを作成したいのですが、ラベルとテキストボックスを生成しようとすると、空のページが返されます。

だから、これは私のモデルファイル(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>ブロックが表示されていますが、内部テキストは空です。

4

1 に答える 1

5

これらのメソッドは、生成されたHTMLコードを含む文字列を返します。
あなたは彼らの戻り値で何もしていません。

@記号を使用して、ページに戻り値を印刷する必要があります。

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

これらはステートメントではないため、は存在しないことに注意してください;。あなたの例では、;は無害です(空のC#ステートメントとして解析されます)。HTMLタグ内にある場合は;、HTMLソースにを出力します。

于 2012-11-14T16:58:07.787 に答える