2017-07-03 19 views
0

マスターと詳細テーブルを同時に更新しようとすると問題が発生します。
投稿編集タスクを呼び出すと、詳細オブジェクトが表示されません。ICollectionプロパティを更新できません。

編集ビューが正しく、すべての詳細行が表示されますが、編集POSTのデバッグ中に、カサスは空です

MODELS

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

CONTROLLER

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

ビュー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> 
+0

あなたはそれが最小に再生可能な単位だに問題を特定しようとしたことがありますか?つまり、ICollectionが期待通りに動作しないという仮説(おそらく、ドキュメントを読んだ後)の場合、あなたはロジックのこの部分を分離して、すべてのスーパーフルコードなしで質問できるようにする必要がありますそれはあなたを助けることがずっと簡単です)。 上記を実行して、事実上ICollectionがあなたの状況で動作するはずであることがわかったら、それを問題のリストから外して、おそらくクライアントからのMVCバインドバックの問題を示しているでしょうか? –

+0

はい、あります。提案ありがとう。 –

+0

編集ポストをデバッグしている間、 "Detail.colate.count"というプロパティは= 0(cero)です マスターテーブルISクラスModelo 詳細テーブルISクラスCasa 私はVisualStudio 2017、EFコアとMVCパターンを使用しています ありがとうございます –

答えて

0

Razorでforeachの代わりにforサイクルを使用すると、デフォルトのasp-for TagHelpersを使用すると、プロパティの名前が正しく表示されません。

あなたは次のようにあなたのかみそりのフォーム入力を変更するあなたの例を修正することができます。

から:

<input type="hidden" asp-for="@Model.Casas.ElementAt(i).Casaid" /> 

へ:

<input type="hidden" name="modelo.Casas[@i].Casaid" value="@Model.Casas.ElementAt(i).Casaid" /> 
+0

ありがとうJoão!!! [@i]を使って作業する!それにもかかわらず、foreachは私のために失敗します。私は声明と[@i]のために使用します。 ありがとうございました –

+0

foreachを使用して生成されたHTMLを見て、キャッチを見つけようとしますが、これは同じことを行います...喜んで助けてください! –

関連する問題