2012-08-23 3 views
0

поэтому у меня есть следующий код:Пользовательское имя файла для @ Html.EditorForModel()?

@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 Типового Марка.

Теперь у меня есть EditorTemplate под Views/общей папке под названием 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 от Марка к AssignmentMarks? Я бы хотел, чтобы это было более конкретным, а не общим именем Marks.

Edit:

Внутри моего 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. cshtm л

@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 
+0

Да, вы можете посмотреть мой ответ здесь: http://stackoverflow.com/questions/12050109/mvc3-editor-template-css-clas-maxlength-and-size/12052784#12052784. Вы просто называете это явно, как @EditorFor (m => m.Mark, «AssignmentMarks») – MiBu

+0

Ну, вы видите, с вызовом @ Html.EditorFor (Model, «AssignmentMarks»). Я получаю несоответствие модели (ожидается, что единая сущность от Mark, вместо этого я передаю IEnumerable. И, чтобы все это произошло, если я продолжу и измените свой файл EditorTemplate, чтобы принять IEnumerable , когда я передаю свой viewModel контроллеру в POST, я получаю возвращаемый тип NULL –

+0

Вы можете упасть в foreach, а затем в каждый редактор вызовов элементов для. Для публикации каждого из элементов в списке должен быть другой идентификатор для свойств (например, Mark.Student.FullName [index] ...), вы можете увидеть http://stackoverflow.com/questions/11267354/how-to-produce-non-sequential-prefix-collection-indices-with-mvc-html-editor-tem/11267659#11267659 для этого сценария. – MiBu

ответ

0
  1. Переименовать класс модели будет AssignmentMarks
  2. Вместо @EditorForModel(), выполните следующие действия:

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

Надеюсь, это поможет вам.