Доступ к объектам базы данных в представлении Asp.Net MVC - PullRequest
0 голосов
/ 18 апреля 2019

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

ПРОСМОТР

@using proName.Models
@{
        proNameEntities DB = new proNameEntities();
}

<div class"">
@{
   int conID;
   var UserExist = DB.Users.Where(x => x.UserID =conID).FirstOrDefault();

   if (UserExist != null)
   {
    <p>@UserExist.name</p>
   }

 }
</div>

Ответы [ 4 ]

1 голос
/ 18 апреля 2019

это не правильно и не рекомендуется

Коды, относящиеся к бэкэнду, должны быть записаны в контроллер (также рекомендуется Microsoft)

записать код в контроллере, а затем передать результат черезмодель для просмотра

1 голос
/ 18 апреля 2019

Чтобы следовать шаблону MVC, вам необходимо:

  1. Создать объект модели представления

    class ViewModel{
        public List<Users> Users {get; set;} // whatever the name of your entity is
    }
    
  2. Заполнить эту ViewModel списком изсторона контроллера:

    public class HomeController : Controller {
    
        proNameEntities DB = new proNameEntities();   //initalise db entities here        
    
        public ActionResult Index(){
            ViewModel vm = new ViewModel();
            vm.Users = this.DB.Users
            return View(vm); // pass the viewmodel object to the view
        }
    }
    
  3. Вверху представления укажите тип получаемого объекта:

    @model ViewModel //use full path if it's not in the same scope
    
  4. Тогдаиспользуйте список представлений моделей в представлении:

    @{
      foreach (user in Users){
           //do something
      }
    }
    

В идеале, вы также хотели бы использовать эту логику UserExist внутри вашего контроллера.Поэтому создайте новое свойство в viewmodel, выполните проверку с контроллера, затем вставьте данные в объект ViewModel и передайте его представлению.

1 голос
/ 18 апреля 2019

Это не правильно, потому что это нарушает MVC (относится к Model-View-Controller).

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

Кроме того, вы отменили роль ViewModel

0 голосов
/ 18 апреля 2019

Вместо того, чтобы помещать код вашей компании / базы данных в View (M V C), вы должны внедрить данные представления в Action. как ниже код:

public ActionResult Index()
{
    var conID = 1; //BASED ON DATA-INPUT
    var userExists = DB.Users.Where(x => x.UserID = conID).FirstOrDefault();
    return View(userExists?.Name);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...