2017-07-11 15 views
-1

このプロジェクトを実行する際に問題があります。私の製品用のテーブルがあります。私ができるページは、「追加」ボタンを押すと、私は私の新しい製品を追加するための小さなウィンドウを持っています。これは私のコントローラです:辞書に渡されたモデルアイテムは、 'System.Collections.Generic.List`1タイプです。[WebApplication7.Models.HesapTemel]

public class HomeController : Controller 
{ 
    CountingEntities hsb = new CountingEntities(); 

    public ActionResult ProductTable() 
    { 

     var product = hsb.HesapTemels.ToList(); 

     List<HesapTemel> yardimci = hsb.HesapTemels.ToList(); 
     ViewBag.Funds = yardimci; 
     return View(product); 
    } 
    [HttpPost] 
    public ActionResult ProductTable(HesapTemel p) 
    { 
     try 
     { 
      HesapTemel _he = new HesapTemel(); 

      _he.HesapAdi = p.HesapAdi; 
      _he.HesapKodu = p.HesapKodu; 
      _he.HesaptipiID = p.HesaptipiID; 
      hsb.HesapTemels.Add(_he); 
      hsb.SaveChanges(); 
      return RedirectToAction("HesapTable", "Home"); 
      } 

     catch (Exception ex) 
     { 
      throw new Exception("an error happened" + ex.Message); 
     } 
    } 

、これが私の見解です:

<div> 
<a class="btn btn-success" data-toggle="modal" data-target=".bootstrapmodal"> 
    <span class="glyphicon glyphicon-eye-open"> 
    </span>Add 
</a> 
<div class="modal fade bootstrapmodal"> 
    <div class="modal-dialog"> 
     <div class="modal-content"> 
      <div class="modal-header"></div> 
      <div class="modal-body"> 
       @Html.Partial("_partial.cshtml"); 
      </div> 
      <div class="modal-footer"></div> 
     </div> 
    </div> 
</div> 
<div> 
    <table style="width: 100%;"> 
     <thead> 
      <tr> 
       <th>id</th> 
       <th>hesap kodu</th> 
       <th>hesap adı</th> 
       <th>hesap tipi</th> 
      </tr> 
     </thead> 
     <tbody> 
      @foreach (var item in ViewBag.Funds) 
     { 
       <tr> 
        <td>@item.ID</td> 
        <td>@item.HesapKodu</td> 
        <td>@item.HesapAdi</td> 
        <td>@item.Hesaptipi.Harf</td> 
       </tr> 
      } 
     </tbody> 
    </table> 
</div> 

これはm yの部分図:

@model WebApplication7.Models.HesapTemel 
@using (Html.BeginForm("ProductTable", "Home", FormMethod.Post, new { @class = "form-horizontal", enctype = "multipart/form-data" })) 
{ 
<div class="row"> 
    <div class="form-horizontal"> 
     <div class="form-group"> 
      <div class="col-md-12"> 
       <label class="col-sm-2 control-label">Hesap kodu</label> 
       <div class="col-sm-10"> 
        @Html.TextBoxFor(m => m.HesapKodu, new { @class = "form-control" }) 
       </div> 
      </div> 
     </div> 
     <div class="form-group"> 
      <div class="col-md-12"> 
       <label class="col-sm-2 control-label">Hesap adı</label> 
       <div class="col-sm-10"> 
        @Html.TextAreaFor(m => m.HesapAdi, new { @class = "form-control" }) 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 
<div class="panel-footer"> 
    <div class="row"> 
     <div class="col-sm-9 col-sm-offset-3"> 
      <div class="btn-toolbar pull-right"> 
       <input type="submit" value="save" class="btn btn-primary" /> 
      </div> 
     </div> 
    </div> 
</div> 

} 

私はこの解決策を実行しているとき、私はこのエラーを持っている: 辞書に渡されたモデルアイテムが型である「System.Collections.Generic.List`1 [WebApplication7.Models.HesapTemel] 'が、この辞書には' WebApplication7.Models.HesapTemel 'タイプのモデルアイテムが必要です。

+0

どのコード行がエラーを示していますか?メインビューのモデルタイプは何ですか? –

+0

そのラインエラーを表示していません! ..モデルタイプはメインビューと同じです...プロジェクトは、私が部分ビューを削除して、同じコードをメインビューとして書く時に働いていますが、同じページに「製品を追加」したい別のリンクに行くことなく –

答えて

0

あなたのProductTableアクションメソッドは、ビューにHesapTemelsオブジェクトのリストを渡しています。私はメインビューがこの同じHesapTemelsオブジェクトのコレクションに強く型付けされていると仮定しています。部分ビューは、HesapTemelの単一のインスタンスに強く入力されます。メインビューでは、モデルを明示的に渡すことなくPartialメソッドを呼び出しています。モデルを渡さないと、この部分から親ビューに渡されたモデルが呼び出されます。したがって、メインビューに渡されたHesapTemelオブジェクトのコレクションを使用します。部分的にはHesapTemelというオブジェクトが渡されることを期待していますが、現在はそのオブジェクトのコレクションが取得されています。そのため、エラーが発生しています。

解決策は、正しいデータを渡すことです。部分はHesapTemelの単一のオブジェクトを期待しているので、メインビューでコレクションをループし、ループ内でpartialを呼び出して、ループしたコレクションの各項目を渡すことができます。

関連する問題