maysam_p82 Ответов: 1

Как я могу передать детали viewmodel из двух таблиц в представление в mvc5?


Во-первых, я хочу знать, использую ли я идентификатор при проектировании моей viewmodel?Я имею в виду, что EF использует свой встроенный идентификатор или мы должны сопоставить наш идентификатор, который получаем от пользователя, с этим идентификатором??
во-вторых , я хочу передать пользователю, что на первой странице введите свой студенческий билет, и страница перейдет на следующую страницу, показывающую студента с его оценками, например, в виде сетки.

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

public class Course
   {
       [Key]
       [DatabaseGenerated(DatabaseGeneratedOption.None)]
      public int CourseId { get; set; }
       public string Title { get; set; }
       public int Credits { get; set; }
       [Range(minimum:0,maximum:20)]
       public int Grade { get; set; }
       [Required]
       [Range(minimum: 0.5, maximum: 4)]
       public int Unit { get; set; }

       public virtual ICollection<Student> Students { get; set; }

   }

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Models
{
    public class Student
    {
        public Student() : base()
        { }        
        [Key]
        [Required]
        public int stID { get; set; }
        [Required]
        [StringLength(maximumLength:50,MinimumLength =2)]
        public string FirstName { get; set; }
        [Required]
        [StringLength(maximumLength: 50, MinimumLength = 2)]
        public string LastName { get; set; }
        [Required]        
        public string Department { get; set; }
        [EmailAddress]
        [Required]
        public string EmailId { get; set; }
        public string Gender { get; set; }
        [Required]
        public DateTime? DOB { get; set; }
        public DateTime DateCreated
        {            set            {                value = DateTime.Now;            }
        }
        public string Address { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        [Required]
        public string Username { get; set; }
        [Required]
        public string Password { get; set; }

        public virtual ICollection<Course> Courses { get; set; }
    }


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace ViewModel
{
    public class StudentGradesVM
    {
        [Required]
        [Key]
       public int stID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Title { get; set; }
        [Key]
        public int CourseId { get; set; }
        public int Grade { get; set; }

    }
}

[HttpGet]
       public ActionResult RedirectStudent(int id)
       {
           if(ModelState.IsValid)
           {
               return RedirectToAction("Results","StudentResults",new { id = id });
           }


               return View(HttpNotFound(id.ToString()));


       }

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Models;
namespace SchoolApp.Controllers
{
    public class StudentResultsController : Controller
    {
        // GET: StudentResults
        public ActionResult Results(ViewModel.StudentGradesVM model)
        {
            if (ModelState.IsValid)
            {
                Student st = new Student
                {
                    FirstName = model.FirstName,
                    LastName = model.LastName,
                };
                Course crse = new Course
                {
                    CourseId = model.CourseId,
                    Grade = model.Grade,
                    Title = model.Title,
                };
                    
             }   

            }
            return View();
        }
    }
}

1 Ответов

Рейтинг:
1

Sunasara Imdadhusen

Нет никакого способа использовать несколько моделей в представлении. Но определенно есть способ, которым вы можете достичь результата, используя следующий метонд:
1. Создайте класс, который будет возвращать объединенные данные

public class StudentCourses
    {
        public Student Student { get; set; }
        public Course Course { get; set; }
    }
    public class Student
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
    public class Course
    {
        public int CourseId { get; set; }
        public string Grade { get; set; }
        public string Title { get; set; }
    }

2. Возврат комбинированной модели данных для просмотра
 Student st = new Student
{
    FirstName = model.FirstName,
    LastName = model.LastName,
};
Course crse = new Course
{
    CourseId = model.CourseId,
    Grade = model.Grade,
    Title = model.Title,
};
var StudentCourses = new StudentCourses() { Student = st;  Course = crse};
return RedirectToAction("Results", "StudentResults", StudentCourses);

3. Используйте модель в поле зрения
@using StudentCourses;

4. Использование для отображения данных на HTML-странице
Информация О Студенте
@Model.Student.FirstName

Информация О Курсе
@Model.Course.Title

С уважением,
Имдадхусен


maysam_p82

Вы имеете в виду,что я должен создать 3 viewmodels,содержащие student, course и studentcourses?

Sunasara Imdadhusen

Да. только так вы можете достичь этого!

maysam_p82

Поэтому я хочу задать еще один вопрос: Нужен ли курс, который мы объявляем в нашей модели представления? Итак, что же такое встроенный идентификатор, который автоматически генерируется в таблицах sql?? Это какая-то путаница.

maysam_p82

Какой параметр я должен передать контроллеру из вида?(Id или модель)