2012-08-23 3 views
0

donc j'ai le code suivant:Nom de fichier personnalisé pour @ 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> 

Comme vous pouvez voir mon modèle étant passé dans la vue est un IEnumerable du modèle Mark.

J'ai maintenant EditorTemplate sous le Vues/dossier partagé appelé 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> 

Ma question est, puis-je renommer mon fichier EditorTemplate de Mark à AssignmentMarks? Je voudrais qu'il soit plus spécifique au lieu d'un nom générique appelé Marks.

Edit:

intérieur mes MarkRepository.cs

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

intérieur mes 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); 
    } 

intérieur de mon Marks.cshtml

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

intérieur de mon AssignmentMark. cshtm l

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

L'erreur que je reçois sur mon point de vue est maintenant:

System.Data.Entity.DynamicProxies.Assignment_7EDE7AD8477AB363802A036747CD8A8B259C6CD72DCEF587A2B0FBEDC7B2DCE1System.Data.Entity.DynamicProxies.Assignment_7EDE7AD8477AB363802A036747CD8A8B259C6CD72DCEF587A2B0FBEDC7B2DCE1System.Data.Entity.DynamicProxies.Assignment_7EDE7AD8477AB363802A036747CD8A8B259C6CD72DCEF587A2B0FBEDC7B2DCE1System.Data.Entity.DynamicProxies.Assignment_7EDE7AD8477AB363802A036747CD8A8B259C6CD72DCEF587A2B0FBEDC7B2DCE1 
+0

Oui, vous pouvez, regardez ma réponse ici: http://stackoverflow.com/questions/12050109/mvc3-editor-template-css-clas-maxlength-and-size/12052784#12052784. Vous l'appelez explicitement, comme @EditorFor (m => m.Mark, "AssignmentMarks") – MiBu

+0

Eh bien, vous voyez, en appelant @ Html.EditorFor (Model, "AssignmentMarks"), je reçois une incompatibilité de modèle (Il attend une seule entité de Mark, à la place je passe dans un IEnumerable ET pour couronner le tout, si je vais de l'avant et change mon fichier EditorTemplate pour accepter un IEnumerable quand je passe mon viewModel au contrôleur sur POST je reçois un type de retour de NULL –

+0

Vous pouvez tomber foreach, puis chaque éditeur d'appel d'article pour.Pour poster chacun des éléments dans la liste doit avoir un ID différent pour les propriétés (par exemple Mark.Student.FullName [index] ...), vous pouvez voir http://stackoverflow.com/questions/11267354/how-to-produce-non-sequential-prefix-collection-indices-with-mvc-html-editor-tem/11267659#11267659 pour ce scénario: – MiBu

Répondre

0
  1. Renommer votre classe de modèle pour être AssignmentMarks
  2. Au lieu de @EditorForModel(), exécutez la commande suivante:

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

J'espère que cela vous aidera.

Questions connexes