2

私はゲームに遅れています。私はEditorForに苦労しています。

テンプレートを使用してエンティティの名前をテキスト ボックスに表示する代わりに、名前が画面に書き込まれます。私の実際のプロジェクトではguidが書かれているように、オブジェクトの最初のプロパティを書いているようです。

テンプレートを指定する際にエディターを使用するにはどうすればよいですか?

ホームコントローラー

public ActionResult Index()
    {
            HomeModel homeModel = new HomeModel();
            homeModel.RoomModels = new List<RoomModel>();
            homeModel.RoomModels.Add(new RoomModel() { RoomName = "Room-1" });
            homeModel.RoomModels.Add(new RoomModel() { RoomName = "Room-2" });
            homeModel.RoomModels.Add(new RoomModel() { RoomName = "Room-3" });

            return View(homeModel);
    }

ホームモデル

public class HomeModel
    {
        public List<RoomModel> RoomModels { get; set; }
    }

ルームモデル

public class RoomModel
{
    public string RoomName { get; set; }
}

/Views/Home/Index.cshtml

@model MVC.Temp.Models.Home.HomeModel

<h1>Home</h1>
<div id="RoomModels">
    @Html.EditorFor(m => m.RoomModels, "_RoomModelEditor")
</div>

/Views/Home/_RoomModelEditor.cshtml

@model MVC.Temp.Models.Home.RoomModel
@Html.TextBoxFor(x => x.RoomName)

現在の出力:

ここに画像の説明を入力

4

3 に答える 3

4

エディター テンプレートをEditorTemplatesというディレクトリに配置する必要があります。したがって、正しいパスは次のようになります。

/Views/Home/EditorTemplates/_RoomModelEditor.cshtml

ドキュメントから:

コントローラーの EditorTemplates フォルダーで templateName パラメーターと一致する名前のテンプレートが見つかった場合、そのテンプレートを使用して式がレンダリングされます。コントローラーの EditorTemplates フォルダーにテンプレートが見つからない場合、Views\Shared\EditorTemplates フォルダーで、templateName パラメーターの名前と一致するテンプレートが検索されます。テンプレートが見つからない場合は、デフォルトのテンプレートが使用されます。

于 2012-10-08T21:11:24.420 に答える
1

/Views/Homeという名前の下にフォルダーを作成しますEditorTemplates。テンプレートを呼び出しますRoomModel.cshtml

したがって、完全なテンプレート名は/Views/Home/EditorTemplates/RoomModel.cshtml.

エディター テンプレートの名前にクラスの名前を使用すると、いつでも@Html.EditorFor(m => m.RoomModels)エディター テンプレートが自動的に使用されます。

アップデート

同じエディター テンプレートを共有する必要があるビューを持つ複数のコントローラーがある場合は、テンプレートを に配置します/Views/Shared/EditorTemplates

于 2012-10-08T21:11:59.847 に答える
-1

あなたの問題は、 a のList<RoomModel>代わりに aを渡していることだと思いますRoomModel

List を受け入れるように EditorTemplate を変更するか、各 RoomModel を表示するビューで Foreach を実行する必要があります。

于 2012-10-08T21:11:11.563 に答える