Member 13053943 Ответов: 1

Как рассчитать баллы для студента в ASP.NET mvc5


я хочу рассчитать средние оценки для студента

Что я уже пробовал:

это моя модель представления
public class StudentCoursesViewModel 

    {
        public uniscoreEntities db = new uniscoreEntities();
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int Code { get; set; }
        public string CourseName { get; set; }
        public int Credit { get; set; }
        public int Mark { get; set; }
        public string Grade { get; set; }
        

        
    }


это мой контроллер
namespace UniScore.Controllers
{
    public class StudentCoursesController : Controller
    {
        // GET: StudentCourses
        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult Index(int? id)
        {

            uniscoreEntities db = new uniscoreEntities();
            Student student = db.Students.Find(id);


            List<StudentCoursesViewModel> StudentCoursesList = new List<StudentCoursesViewModel>();
            // var coursesList = db.Courses.ToList();
            // var StudentCourses = db.Student_Course.ToList();
            Student_Course injec = new Student_Course();

            var StudentCourses = db.Student_Course.Where(b => b.Student_id == id);




            foreach (var item in StudentCourses)
            {
                StudentCoursesViewModel objele = new StudentCoursesViewModel();
                Student studento = db.Students.Find(item.Student_id);
                objele.FirstName = studento.FirstName;
                objele.LastName = studento.LastName;
                Course course = db.Courses.Find(item.Course_id);
                objele.CourseName = course.CourseName;
                objele.Code = course.Code;
                objele.Credit = course.Credit;
               // Student_Course testy = db.Student_Courses.Find(item.Marks);
                objele.Grade = item.Grade;
                objele.Mark = item.Mark;


                StudentCoursesList.Add(objele);


            }
            return View(StudentCoursesList);
        }
    }
}



это моя точка зрения
@model  IEnumerable<UniScore.ViewModels.StudentCoursesViewModel>

@{
    ViewBag.Title = "Details";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Details</h2>

<div>
    <h4>Student</h4>
    <hr />
    <dl class="dl-horizontal">
        <dt>
            @Html.DisplayNameFor(model => model.FirstName)
        </dt>

        <dd>

        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.LastName)
        </dt>

        <dd>

        </dd>
    </dl>
</div>



<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.CourseName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Code)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Credit)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Mark)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Grade)
        </th>
    </tr>


    @foreach (var item in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.CourseName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Code)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Credit)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Mark)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Grade)
            </td>
        </tr>
    }

</table>

<p>
    
        AVERAGE MARKS:
    
</p>




<p>
    @Html.ActionLink("Back to List", "Index", "Students")
</p>

1 Ответов

Рейтинг:
6

Ehsan Sajjad

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

<p>    
AVERAGE MARKS: @(Model.Sum(x=>x.Mark)/Model.Count()) 
</p>


и ваша ViewModel не очень хорошо определена, технически ваша ViewModel должна иметь все свойства, которые должны быть использованы в представлении, поэтому было бы лучше включить свойство Average в вашу ViewModel, и ваше представление должно просто отображать это, а не вычислять его в представлении.

Лучшей моделью просмотра было бы что-то вроде:

public class StudentCoursesViewModel 
{
    public List<Course> Courses {get;set;}
    public AverageMarks 
    {
       get { return (Course.Sum()/Courses.Count()); }
          
    }
        
}

public class Course
{
   public int Id { get; set; }
   public string FirstName { get; set; }
   public string LastName { get; set; }
   public int Code { get; set; }
   public string CourseName { get; set; }
   public int Credit { get; set; }
   public int Mark { get; set; }
   public string Grade { get; set; }
}


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


Afzaal Ahmad Zeeshan

5ед.

Member 13053943

пожалуйста, о каком типе модели вы говорите.должен ли я скопировать и вставить то, что вы предложили в моем коде?пожалуйста, объясните свой ответ.Я новичок в этом деле asp.net mvc 5

Ehsan Sajjad

в настоящее время вы можете написать приведенный выше код в поле зрения, чтобы продолжать идти, но viewmodel должен быть местом для этого.

Member 13053943

братан, это не сработало,в представлении просто отображался код, который ты послал.

Ehsan Sajjad

класть

@
до кода я пропустил это

Member 13053943

подобный этому,
Средние оценки: @(Model. Sum(x => x.Mark) / Model.Рассчитывать())

Member 13053943

можете ли вы показать мне, как это сделать в viewmodel и controller и передать его в view?все пробовали большинство методов linq, но дает ошибку.помогать мне

Member 13053943

я назначил некоторые переменные в своем контроллере, чтобы подсчитать количество курсов.ваш код дал мне сумму course.so я назвал свою переменную viewbag, и она сработала как по волшебству.теперь я могу добавлять курсы к каждому студенту n найти средние значения

Ehsan Sajjad

не используйте ViewBag, используйте ViewModel, как я предложил выше