asp. net | Передача данных из БД Контроллером в Представление - PullRequest
0 голосов
/ 08 февраля 2020

Des c:

  • Я получаю информацию из базы данных, используя EF
var card= _ecpContext.Card.Where(sth).ToList();
  • this дает мне информацию в формате List <>

    Количество карт = 31

    [0] {App.Models.Card}

    [1] {App. Models.Card}

    [2] {App.Models.Card}

  • Я хочу передать эти данные из контроллера для просмотра

  • Я пытаюсь сделать это так:

Контроллер:

[HttpPost]
public async Task<ActionResult> MethodsReturnView(string previously_uploaded_data_from_ajax)
{

var userName = _httpContextAccessor.HttpContext.User.Identity.Name;
            var userDetailsAU = _ecpContext.AC_Merge_V.FirstOrDefault(f => f.ADlogin == userName);
            var userDetails = _context.Uzytkownicy.FirstOrDefault(f => f.Adlogin == userName);

            dynamic serializer = JsonConvert.DeserializeObject<IDictionary>(previously_uploaded_data_from_ajax);

            var numerMiesiacaObject = serializer["numerMiesiaca"];
            var numerRokuObject = serializer["numerRoku"];
            var liczbaDniObject = serializer["liczbaDni"];


            int numerMiesiaca = Convert.ToInt32(numerMiesiacaObject);
            int numerRoku = Convert.ToInt32(numerRokuObject);
            int liczbaDni = Convert.ToInt32(liczbaDniObject);


            ViewBag.numerMiesiaca = numerMiesiaca;
            ViewBag.numerRoku = numerRoku;
            ViewBag.liczbadni = liczbaDni;


      var dbExists = _ecpContext.Karta.FirstOrDefault(f => f.DzMiesiaca == 1 && f.Miesiac == numerMiesiaca && f.Rok == numerRoku && f.Login == userName);
            if (dbExists == null)
            {
                List<Karta_Model> objKartaModel = new List<Karta_Model>();

                for (int i = 1; i <= liczbaDni; i++)
                {

                    var model = new Karta_Model()
                    {
                      // sth
                    };

                    objKartaModel.Add(model);

                }



                await _ecpContext.Karta.AddRangeAsync(objKartaModel);
                await _ecpContext.SaveChangesAsync();
            }
            var karta = _ecpContext.Karta.Where(f => f.Miesiac == numerMiesiaca && f.Rok == numerRoku && f.Login == userName).OrderBy(x => x.Rok).ThenBy(x => x.Miesiac).ThenBy(x => x.DzMiesiaca).ToList();


     return PartialView("_ReturnView", karta);
}

Проблема:

  • , но выдает ошибку, если добавляет 'card' рядом с возвращаемым представлением

    Не удалось загрузить ресурс : сервер ответил со статусом 500 (Внутренняя ошибка сервера)

  • ошибка возникает при вызове команды возврата (исследуется, красная точка)

  • без отправки этих данных, представление возвращается нормально

Дополнительно:

Моя модель:

public partial class Karta_Model
{
    [Key]
    public int Id { get; set; }
    public int? NrDay{ get; set; }
    public int? NrMonth { get; set; }
    public int? NrYear{ get; set; }
    public string? Rozpoczecie { get; set; } 
    public string? Zakonczenie{ get; set; } 
    public string? OdbiorGodzin{ get; set; } 
    ...
}

public partial class ParentView
{
    public List<Karta_Model> Model1 { get; set; }
}

Вид:

using AppEcp.Models
@model ParentView

 @for (int nr_rows = 0; nr_rows < @ViewBag.daysInMonth; nr_rows++)
{
  <tr>
        <td>@Html.TextBoxFor(m => m.Model1[nr_rows].Rozpoczecie, new { @class = "start", @type = "time" })</td>
        <td>@Html.TextBoxFor(m => m.Model1[nr_rows].Zakonczenie, new { @class = "end", @type = "time" })</td>
        <td>@Html.TextBoxFor(m => m.Model1[nr_rows].OdbiorGodzin, new { @class = "gethours", @type = "time" })</td>
  </tr>
}

Вопросы:

  • Есть ли другой способ отправить эти данные из контроллера в представление?

  • Что я здесь не так делаю?

1 Ответ

1 голос
/ 08 февраля 2020

Вы передаете List<Karta>, в то время как в режиме просмотра ожидается ParentView.

Так что вы должны сделать это

var karta = _ecpContext.Karta.Where(f => f.Miesiac == numerMiesiaca && f.Rok == numerRoku && f.Login == userName).OrderBy(x => x.Rok).ThenBy(x => x.Miesiac).ThenBy(x => x.DzMiesiaca).ToList();
var kartaModel = karta.Select(p => new Karta_Model 
               { 
                 Id = p.Id // Assign the rest of properties here 
               }).ToList();
var viewModel = new ParentView { Model1  = kartaModel  };

return PartialView("_ReturnView", viewModel);
...