【问题标题】:Custom Filename for @Html.EditorForModel()?@Html.EditorForModel() 的自定义文件名?
【发布时间】:2012-08-23 21:57:07
【问题描述】:

所以我有以下代码:

@model IEnumerable<My_School_Book.Models.Mark>
@{
    ViewBag.Title = "Marks";
}

<div class="row-fluid">
    <h1>Assignment Marks:</h1>
    @using (Html.BeginForm("Marks", "Assignment", FormMethod.Post, new { @class = "form-horizontal" }))
    {
        <table class="table table-bordered">
            <thead>
                <tr>
                    <th>Student</th>
                    <th style="width: 50px;">Mark
                    </th>
                    <th style="width: 50px;">Total
                    </th>
                    <th style="width: 50px;">Weight</th>
                </tr>
            </thead>
            <tbody>
                @Html.EditorForModel()
            </tbody>
        </table>
        <div class="form-actions">
            <button type="submit" class="btn btn-primary"><i class="icon-checkmark"></i>&nbsp;Save</button>
            <a href="@Url.Action("Index", "Assignment")" class="btn btn-primary"><i class="icon-back"></i>&nbsp;Cancel</a>
        </div>
    }
</div>

如您所见,传递给视图的模型是模型标记的 IEnumerable。

现在我在 Views/Shared 文件夹下有一个 EditorTemplate,名为 Mark:

@model My_School_Book.Models.Mark
<tr>
    <td>@Model.Student.FullName</td>
    <td>
        @Html.TextBoxFor(model => Model.Grade, new { @class = "span12", @style = "min-height: 20px;", @maxlength = "5" })
    </td>
    <td>
        @Model.Assignment.Total
    </td>
    <td>@Model.Assignment.Weight</td>
</tr>

我的问题是,我可以将我的 EditorTemplate 文件从 Mark 重命名为 AssignmentMarks 吗?我希望它更具体,而不是称为 Marks 的通用名称。

编辑:

在我的 MarkRepository.cs 中

    public IEnumerable<Mark> GetAllByAssignmentID(Guid id)
    {
        return context.Marks.Where(m => m.AssignmentID == id);
    }

在我的 AssignmentController.cs 中

    public ActionResult Marks(Guid id)
    {
        IEnumerable<Mark> Marks = markRepository.GetAllByAssignmentID(id).ToList();
        return View(Marks);
    }

    [HttpPost]
    public ActionResult Marks(IEnumerable<Mark> viewModel)
    {
        if (ModelState.IsValid)
        {

        }
        return View(viewModel);
    }

在我的 Marks.cshtml 中

   @Html.EditorForModel("Mark", "AssignmentMark")

在我的 AssignmentMark.cshtml 中

@model My_School_Book.Models.Mark
<tr>
    <td>@Html.DisplayTextFor(model => model.Student.FullName)</td>
    <td>@Html.TextBoxFor(model => model.Grade, new { @class = "span12" })</td>
    <td>@Html.DisplayTextFor(model => model.Assignment.Total)</td>
    <td>@Html.DisplayTextFor(model => model.Assignment.Weight)</td>
</tr>

我在视图上收到的错误现在是:

System.Data.Entity.DynamicProxies.Assignment_7EDE7AD8477AB363802A036747CD8A8B259C6CD72DCEF587A2B0FBEDC7B2DCE1System.Data.Entity.DynamicProxies.Assignment_7EDE7AD8477AB363802A036747CD8A8B259C6CD72DCEF587A2B0FBEDC7B2DCE1System.Data.Entity.DynamicProxies.Assignment_7EDE7AD8477AB363802A036747CD8A8B259C6CD72DCEF587A2B0FBEDC7B2DCE1System.Data.Entity.DynamicProxies.Assignment_7EDE7AD8477AB363802A036747CD8A8B259C6CD72DCEF587A2B0FBEDC7B2DCE1

【问题讨论】:

  • 是的,你可以,在这里看看我的回答:stackoverflow.com/questions/12050109/…。您只需明确调用它,例如 @EditorFor(m =>m.Mark, "AssignmentMarks")
  • 好吧,你看,通过调用 @Html.EditorFor(Model, "AssignmentMarks") 我得到一个模型不匹配(它期望 Mark 的单个实体,而不是我传递一个 IEnumerable。并且最重要的是,如果我继续更改我的 EditorTemplate 文件以接受 IEnumerable 当我在 POST 上将我的 viewModel 传递回控制器时,我会得到一个返回类型为 NULL
  • 你可以使用foreach,然后为每个项目调用编辑器。对于发布列表中的每个项目必须具有不同的属性 ID(即 Mark.Student.FullName[index]...),您可以看到 stackoverflow.com/questions/11267354/… 用于该场景。
  • @ Html.EditorFor(型号=> model.marks)现在返回此:System.Data.Entity.DynamicProxies.Assignment_7EDE7AD8477AB363802A036747CD8A8B259C6CD72DCEF587A2B0FBEDC7B2DCE1System.Data.Entity.DynamicProxies.Assignment_7EDE7AD8477AB363802A036747CD8A8B259C6CD72DCEF587A2B0FBEDC7B2DCE1System.Data.Entity.DynamicProxies.Assignment_7EDE7AD8477AB363802A036747CD8A8B259C6CD72DCEF587A2B0FBEDC7B2DCE1为什么?
  • 您在点击查看之前是否对列表进行了序列化?您的 EF 上下文在页面上不存在,因此之前应该序列化每个对象。顺便提一句。使用 POCO 类和 DbContext 很好。

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


【解决方案1】:
  1. 将模型类重命名为AssignmentMarks
  2. 运行以下命令,而不是 @EditorForModel()

    @foreach(var mark in Model)
    {
      @EditorFor(m => m.Mark, "AssignmentMark")
    }
    

希望这会对你有所帮助。

【讨论】:

    猜你喜欢
    • 2019-06-30
    • 2015-04-29
    • 1970-01-01
    • 2019-01-02
    • 2020-11-01
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多