2

我比赛迟到了。我正在为 EditorFor 苦苦挣扎。

不是使用模板在文本框中显示实体的名称,而是将名称写入屏幕。它似乎正在编写对象的第一个属性,因为在我的真实项目中正在编写一个 guid。

如何在指定模板时使用 editorfor?

家庭控制器

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

我认为您的问题是您传递的是 aList<RoomModel>而不是 a RoomModel

您应该更改 EditorTemplate 以接受列表...或在显示每个 RoomModel 的视图中执行 Foreach。

于 2012-10-08T21:11:11.563 回答