C# asp.net |控制器将数据从数据库传输到视图

C# asp.net |控制器将数据从数据库传输到视图,c#,asp.net,asp.net-mvc,entity-framework,asp.net-core,C#,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Core,Desc: 我使用EF从数据库中获取信息 这给了我列表格式的信息 卡数=31 [0]{App.Models.Card} [1] {App.Models.Card} [2] {App.Models.Card} 我想将此数据从控制器传输到视图 我试着这样做: 控制器: [HttpPost] public async Task MethodsReturnView(以前从\u ajax上传的\u数据\u字符串) { var userName=\u httpContextAccessor.Htt

Desc:

  • 我使用EF从数据库中获取信息
  • 这给了我列表格式的信息

    卡数=31

    [0]{App.Models.Card}

    [1] {App.Models.Card}

    [2] {App.Models.Card}

  • 我想将此数据从控制器传输到视图

  • 我试着这样做:

控制器:

[HttpPost]
public async Task MethodsReturnView(以前从\u ajax上传的\u数据\u字符串)
{
var userName=\u httpContextAccessor.HttpContext.User.Identity.Name;
var userDetailsAU=\u ecpContext.AC\u Merge\u V.FirstOrDefault(f=>f.ADlogin==userName);
var userDetails=\u context.Uzytkownicy.FirstOrDefault(f=>f.Adlogin==userName);
dynamic serializer=JsonConvert.DeserializeObject(以前从ajax上传数据);
var numeriesiacaobject=序列化程序[“numeriesiaca”];
var numerRokuObject=序列化程序[“numerRoku”];
var liczbadinobject=序列化程序[“liczbaDni”];
int numeriesiaca=Convert.ToInt32(numeriesiacaobject);
int numerRoku=Convert.ToInt32(numerRokuObject);
int-liczbaDni=Convert.ToInt32(liczbadinobject);
ViewBag.numeriesiaca=numeriesiaca;
ViewBag.numeroku=numeroku;
ViewBag.liczbadni=liczbadni;
var dbExists=\u ecpContext.Karta.FirstOrDefault(f=>f.DzMiesiaca==1&&f.Miesiac==numeriesiaca&&f.Rok==numeriorku&&f.Login==userName);
if(dbExists==null)
{
List objKartaModel=新列表();
for(inti=1;if.Miesiac==numeriesiaca&f.Rok==numerioku&f.Login==userName).OrderBy(x=>x.Rok).ThenBy(x=>x.Miesiac).ThenBy(x=>x.DzMiesiaca.ToList();
返回部分视图(“返回视图”,karta);
}
问题:

  • 但如果在返回的视图附近添加“card”,则会抛出一个错误

    加载资源失败:服务器响应状态为500(内部服务器错误)

  • 调用return命令时引发错误(已调查,红点)

  • 如果不发送此数据,视图将正常返回

另外:

我的型号:

公共部分类Karta_模型
{
[关键]
公共int Id{get;set;}
公共int?NrDay{get;set;}
公共int?nrmount{get;set;}
公共整数?NrYear{get;set;}
公共字符串?Rozpoczecie{get;set;}
公共字符串?Zakonczenie{get;set;}
公共字符串?OdbiorGodzin{get;set;}
...
}
公共部分类ParentView
{
公共列表模型1{get;set;}
}
查看:

使用AppEcp.Models
@模型父视图
@对于(int nr_rows=0;nr_rows<@ViewBag.daysInMonth;nr_rows++)
{
@Html.TextBoxFor(m=>m.Model1[nr_行].Rozpoczecie,新{@class=“start”,@type=“time”})
@Html.TextBoxFor(m=>m.Model1[nr_行].Zakonczenie,新{@class=“end”,@type=“time”})
@Html.TextBoxFor(m=>m.Model1[nr_行].OdbiorGodzin,新{@class=“gethours”,@type=“time”})
}
问题:

  • 是否有其他方法将此数据从控制器发送到视图

  • 我做错了什么


您正在传递
列表
,而在视图中,您需要的是
父视图

所以你应该这样做

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);

如果在返回的视图附近添加“卡”,则会给我带来一个错误:控制器中的代码在哪里?@Phong update,请指导我,因为我已经受此困扰很长时间了
[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);
}
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>
}
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);