Показать записи из базы данных - PullRequest
1 голос
/ 07 ноября 2011

Мне нужно показать запись из базы данных. Но у меня есть ошибка:

«объект» не содержит определения «Логин»

Вид:

 @using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Dodaj Pracownika</legend>

    @foreach (var pr in ViewBag.dane)
        {
            <div>Login: @pr.Login</div>

              <div>Imie: @pr.imie</div> 

        }
</fieldset>
}

Контроллер:

public ActionResult detail(int LoginID)
    {
        var user = (from p in baza.Logowanies
                    join d in baza.uzytkowniks on p.LoginID equals d.LoginID 
                    where LoginID == p.LoginID
                    select new { p.Login, p.Haslo, p.konto, d.imie, d.nazwisko, d.pesel, d.nip, d.telefon, d.adres_zamieszkania, d.email }).ToList();
        ViewBag.dane = user;
        return View();
    }

Это работало, когда я помещал записи из одной таблицы в базу данных (без объединения в запросе). Но сейчас что-то не так.

Использование

@grid.GetHtml

все в порядке.

//////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////

EDIT

Я делаю правки, и теперь у меня есть:

Вид:

@model Restauracja.Models.pracownikModel
 @foreach (dynamic pr in ViewBag.dane)
        {
            <div>Login: @pr.Login</div>

             <div>Imie: @pr.imie</div>

Модель:

public class pracownikModel 
    {
         public LoginModel LoginModel { get; set; }
         public uzytkownikModel uzytkownikModle { get; set; }
       public pracownikModel() {
           LoginModel = new LoginModel();
           uzytkownikModle = new uzytkownikModel();
       }
    }

    public class LoginModel 
    {
        [Required]
        public string Użytkownik { get; set; }

        [Required]
        public string Hasło { get; set; }

        public string Konto { get; set; }

    }

    public class uzytkownikModel
    {
        [Required]
        public string imie { get; set; }

        [Required]
        public string nazwisko { get; set; }
           . . . . .

    }

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

public ActionResult Kontakt()
        {
            bazaDataContext baza = new bazaDataContext();
            var user = (from p in baza.Logowanies
                        join d in baza.uzytkowniks on p.LoginID equals d.LoginID
                        select new pracownikModel{p.Login, d.imie}).ToList();

            ViewBag.dane = user;
            return View(user);
        }

В контроллере у меня есть выбор

выберите новую pracownikModel {p.Login, d.imie})

и я не могу добавить

uzytkownik = p.Login, imie = d.imie

потому что insted uzytkownik и imie у меня есть LoginModel или uzytkonikModel.

У меня есть

выберите новый pracownikModel {...}

и у меня ошибка:

Не удалось инициализировать тип «Restauracja.Models.pracownikModel» с помощью инициализатора коллекции, поскольку он не реализует «System.Collections.IEnumerable»

1 Ответ

4 голосов
/ 07 ноября 2011

Вы изменили использование анонимного объекта, поэтому представление не знает, какой это тип, и по умолчанию используется тип object. Вы можете использовать dynamic вместо var или выбрать класс с теми же свойствами, что и у анонимного объекта, и в этом случае он сможет определить тип и узнать, что у него есть эти свойства.

    @foreach (dynamic pr in ViewBag.dane)
    {
        <div>Login: @pr.Login</div>

          <div>Imie: @pr.imie</div> 

    }

Или

public ActionResult detail(int LoginID)
{
    var user = (from p in baza.Logowanies
                join d in baza.uzytkowniks on p.LoginID equals d.LoginID 
                where LoginID == p.LoginID
                select new LoginModel
                {
                    Login = p.Login,
                    Haslo = p.Haslo,
                    ...
                }).ToList();
    ViewBag.dane = user;
    return View();
}

с моделью класса

public class LoginModel
{
      public string Login { get; set; }
      public string Haslo { get; set; }
      ...
} 

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

Действие

    ...
    return View( user );
}

View

@model LoginModel

...

     @foreach (dynamic pr in Model)
     {
        <div>Login: @pr.Login</div>

         <div>Imie: @pr.imie</div> 

     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...