2016-08-16 2 views
0

У меня есть модель курс, компонент, субкомпонент и оценка:Вставить значение на разных моделях в одном представлении MVC 4

public class Course 
    { 
     public virtual int CourseId { get; set; } 
     (...) 
     public virtual List<Component> Components { get; set; } 
     public virtual List<UserCourse> Users { get; set; } 
    } 

public class Component 
    { 
     public virtual int ComponentId { get; set; } 

     public virtual string Type { get; set; } 
     public virtual string Name { get; set; } 

     public virtual Course Course { get; set; } 

     public virtual List<Subcomponent> Subcomponents { get; set; } 

    } 

public class Subcomponent 
    { 
     public virtual int SubcomponentId { get; set; } 
     public virtual int ComponentId { get; set; } 

     public virtual string TypeSub { get; set; } 
     public virtual string NameSub { get; set; } 
     (...) 

     public virtual int ParentId { get; set; } 
     public virtual Subcomponent Parent { get; set; } 
     public virtual List<Subcomponent> Childs { get; set; } 

     public virtual Component Component { get; set; } 

    } 

public class Evaluation 
    { 
     public virtual int EvaluationId { get; set; } 

     public virtual int ComponentId { get; set; } 
     public virtual Component Component { get; set; } 

     public virtual int UserCourseId { get; set; } 
     public virtual UserCourse User { get; set; } 

     public virtual int Grade { get; set; } 
    } 

мне нужно дать оценку каждый подкомпонент (или компоненту, если компонент не имеют подкомпоненты) каждому пользователю. Во-первых у меня есть мнение, что показывает пользователей и оценки уже данные, как индекс:

@model SGP.Models.Course 

<table> 
    <tr> 
     <th> 
      Users 
     </th> 

     <th> 
      Grades 
     </th> 
    </tr> 

    @foreach (var x in Model.Users) 
    { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => x.User.UserName) 
      </td> 
      @foreach (var y in x.Evaluation) 
      { 
       <td> 
        <table> 
         <tr> 
          <td> 
           <b>@Html.DisplayFor(modelItem => y.Component.NameComp)</b> 
          </td> 
         </tr> 
         <tr> 
          <td> 
           @Html.DisplayFor(modelItem => y.Grade) 
          </td> 
         </tr> 
        </table> 
       </td> 
      } 
      <td> 
       @Html.ActionLink("Give grade", "Comps", "Evaluation", new { id = x.UserCourseId }, null) 
      </td> 
     </tr> 
    } 
</table> 

Затем при нажатии «Подари класс», у меня есть окно поиска, чтобы выбрать компонент, которым сорт будет дано , Поиск даст список подкомпонентов этого компонента. Каждый компонент может иметь один или несколько подкомпонентов, поэтому конечный класс для компонента является средним по классам подкомпонентов. Вид подкомпонентов:

@model SGP.Models.Component 

<table> 
    <tr>   
     <th> 
      @Html.DisplayFor(model => model.NameComp) 
     </th>  
     <th> 
      Grade 
     </th> 
    </tr> 

@foreach (var item in Model.Subcomponents) { 
    <tr>  
     <td> 
      @Html.DisplayFor(modelItem => item.NameSub) 
     </td>  

     <td> 
      ??????? 
     </td> 

    </tr> 
} 

</table> 

Но с этой точки зрения мне нужно, чтобы получить UserCourseId выбранный ранее и дать оценку пользователю в выбранной подкомпоненте. Как я могу это сделать? Благодаря

EDIT: Дают оценка:

@using (Html.BeginForm("ListaSubs", "Evaluation", FormMethod.Post)) 
    { 
     <table> 
      <tr> 
       <th> 
        @Html.TextBox("text") 
       </th> 
       <td> 
        <input type="submit" id="ButtonSearch" value="Search" /> 
       </td> 
      </tr> 
     </table> 
    } 

И контроллер:

[HttpPost, ActionName("ListaSubs")] 
    public ActionResult ListaSubs(string text) 
     { 
     var util = (db.Subcomponents.Where(m => 
     m.ComponentId.Equals(text))); 
     return View("view", util); 
     } 
+0

, что означает «дать оценку» вид выглядеть и как она изображена? – Steve

+0

@Steve Его в вопросе сейчас – dasdasd

ответ

0

Что делать в этом случае, чтобы определить класс-оболочку и использовать его для модели представления. Что-то вроде этого:

public class MyWrapperClass 
{ 
    public Course _Course { get; set; } 
    public Component _Component { get; set; } 
    ... 
} 

Затем на ваш взгляд, можно определить модель как:

@model MyWrapperClass 

Для некоторых элементов управления, вы можете просто использовать следующий формат для свойств:

@Html.HiddenFor(model => model._Course.CourseId) 

Но в некоторых случаях вам, вероятно, придется создавать EditorTemplate или DisplayTemplate для каждого подкласса и использовать шаблоны в представлении.

Чтобы использовать шаблон редактора, вам необходимо использовать атрибут UIHint в определении класса.

Вот некоторые ссылки о том, как использовать шаблон редактора в бритве:

How to add and use a razor editor template

https://www.simple-talk.com/dotnet/asp-net/extending-editor-templates-for-asp-net-mvc/

Смежные вопросы