Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can’;t更新ICollection属性_C#_Asp.net Core_Asp.net Core Mvc_Entity Framework Core - Fatal编程技术网

C# Can’;t更新ICollection属性

C# Can’;t更新ICollection属性,c#,asp.net-core,asp.net-core-mvc,entity-framework-core,C#,Asp.net Core,Asp.net Core Mvc,Entity Framework Core,问题是当我试图同时更新主表和明细表时。 调用Post编辑任务时,不会显示详细信息对象 “编辑”视图正确显示所有详细信息行,但在调试“编辑公告”时,Casas为空 模型 public partial class Modelo : IValidatableObject { public Modelo() { Casas = new HashSet<Casa>(); } public int Modeloid { get

问题是当我试图同时更新主表和明细表时。
调用Post编辑任务时,不会显示详细信息对象

“编辑”视图正确显示所有详细信息行,但在调试“编辑公告”时,Casas为空

模型

 public partial class Modelo : IValidatableObject {
     public Modelo()    
     {
         Casas = new HashSet<Casa>();
     }

     public int Modeloid { get; set; }
     public string Modelo1 { get; set; }
     public virtual ICollection<Casa> Casas { get; set; }//Don’t work to update
}

public partial class Casa   //  DETAIL TABLE
{
    public int Casaid { get; set; }
    public int Modeloid { get; set; }  // FK to Modelo
    public string Casa1 { get; set; }
    public virtual Modelo Modelo { get; set; }
}
公共部分类Modelo:IValidatableObject{
公共模型()
{
Casas=新的HashSet();
}
公共int模型{get;set;}
公共字符串Modelo1{get;set;}
公共虚拟ICollection Casas{get;set;}//无法更新
}
公共部分类Casa//明细表
{
公共int Casaid{get;set;}
public int Modeloid{get;set;}//FK to Modelo
公共字符串Casa1{get;set;}
公共虚拟模型{get;set;}
}
控制器

public class ModelosController : Controller

. . . . . . . . . 
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id,  Modelo modelo)
{
   if (id != modelo.Modeloid)
   {
       return NotFound();
   }
   if (ModelState.IsValid)
   {
   //   Here modelo.Modelo1 has current modified value 
   //   but modelo.Casas.Count == 0
        _context.Update(modelo);  
        await _context.SaveChangesAsync();
   }
}

// GET: Modelos/Edit
public async Task<IActionResult> Edit(int? id)
{
    if (id == null)
    {
        return NotFound();
    }
    var modelo = await _context.Modelo
                       .AsNoTracking() 
                       .Include(m => m.Fotomodelos)
                       .Include(m => m.Casas)
                       .SingleOrDefaultAsync(m => m.Modeloid == id);
    if (modelo == null)
    {
        return NotFound();
    }
    return View(modelo);
}
公共类模型控制器:控制器
. . . . . . . . . 
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务编辑(int-id,Modelo-Modelo)
{
if(id!=modelo.Modeloid)
{
返回NotFound();
}
if(ModelState.IsValid)
{
//这里modelo.Modelo1具有当前修改的值
//但是modelo.Casas.Count==0
_更新(modelo);
wait_context.SaveChangesAsync();
}
}
//获取:Modelos/Edit
公共异步任务编辑(int?id)
{
if(id==null)
{
返回NotFound();
}
var modelo=wait_context.modelo
.AsNoTracking()
.包括(m=>m.Fotomodelos)
.包括(m=>m.Casas)
.SingleOrDefaultAsync(m=>m.Modeloid==id);
if(modelo==null)
{
返回NotFound();
}
返回视图(modelo);
}
View EDIT.CSHTML

@using System.IO
@model Disponibilidad.Models.Modelo


<form asp-action="Edit">
  <div class="form-horizontal">
  <hr />
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
      <input type="hidden" asp-for="Modeloid" />
      <div class="form-group">
        <label asp-for="Modelo1" class="col-md-2 control-label"></label>
        <div class="col-md-10">
           <input asp-for="Modelo1" class="form-control" />
           <span asp-validation-for="Modelo1" class="text-danger"></span>
        </div>
      </div>
      @{
       for (int i = 0; i < Model.Casas.Count; i++)
       {
            <input type="hidden" asp-for="@Model.Casas.ElementAt(i).Modeloid"
                             value="@Model.Modeloid" />
            <input type="hidden" asp-for="@Model.Casas.ElementAt(i).Casaid" />
        <div class="form-group">
         <label asp-for="@Model.Casas.ElementAt(i).Casa1" 
            class="col-md-2 control-label"></label>
         <div class="col-md-10">
            <input asp-for="@Model.Casas.ElementAt(i).Casa1"      
               class="form-control" />    <!--  DISPLAY OK Detail rows -->  
            <span asp-validation-for="@Model.Casas.ElementAt(i).Casa1" 
              class="text-danger"></span>
         </div>
        </div>
       }
       }

       <div class="btn-group">
         <button type="submit" class="btn btn-danger">Save</button>
       </div>
    </div>
</form>
@使用System.IO
@模型Disponibilidad.Models.Modelo

@{ 对于(int i=0;i
当您在Razor中使用
而不是
foreach
循环时,在使用默认的
asp for
TagHelpers时,属性名称无法正确呈现

您可以修改示例,更改razor表单输入,如下所示:

发件人:


致:



您是否尝试将问题隔离到最小的可复制单元?我的意思是,如果您的假设是ICollection的行为不符合您的预期(大概是在阅读了文档之后),那么您应该将这部分逻辑隔离开来,这样您就可以在不使用所有超级代码的情况下问问题(这样可以更容易地帮助您)。如果您执行了上述操作,并且发现事实上ICollection在您的环境中确实表现出了应有的行为,那么您可以将其从问题列表中划掉,这可能表明客户端的MVC绑定回存在问题?是的,我有。谢谢你的建议。当我调试编辑帖子时,属性“Collection.count of Detail object”是=0(cero)主表是类Modelo Detail Table是类Casa我正在使用VisualStudio 2017,EF Core和MVC模式,提前感谢检查它是如何呈现到输出的。若要进行绑定,输入的名称应类似于
modelo.propName
。我打赌您必须手动更改Razor并添加名称和值属性,而不是使用asp for taghelper。谢谢João!!!使用[@i]有效!!!尽管如此,我还是失败了。。我将用于语句和[@I]。再次感谢您,您可以使用foreach查看生成的HTML并尝试查找捕获,但这也会做同样的事情。。。很乐意帮忙!
<input type="hidden" asp-for="@Model.Casas.ElementAt(i).Casaid" />
<input type="hidden" name="modelo.Casas[@i].Casaid" value="@Model.Casas.ElementAt(i).Casaid" />