2017-06-14 2 views
0

Ich bin neu im Web von Desktop.Ansicht nicht mehrere Listen in Asp.net MVC

Ich habe zwei Modelle.

erste

public class Item 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public string Description { get; set; } 
     public double Price { get; set; } 
     public double Stock { get; set; } 
     public Category Category { get; set; } 
     public string ImagePath { get; set; } 
} 

und zweite ist

public class Category 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public bool isSelected { get; set; } 
    } 

und ein Ansichtsmodell für sie meiner Ansicht

public class ProductsVM 
{ 
    public IList<Item> items { get; set; } 
    public IList<Category> categories { get; set; } 

} 

und mein Controller-Aktion-Methode sieht wie folgt aus

vorbei

i verwendet habe es meiner Meinung nach wie dies

@using (Html.BeginForm()) 
    { 
     <div class="row"> 
      <div class="col-md-2"> 
       @foreach (var it in Model.categories.ToList()) 
       { 
        <div class="input-group"> 
         @Html.CheckBoxFor(i => it.isSelected, new { Name =   "ChkCategory", id = "ChkCategory"+it.Id, @class = "Categories" }) @it.Name 
         @Html.HiddenFor(i => it.Name) 

        </div> 
       } 
      </div> 

      @*Loading Items...*@ 
      <div class="col-md-10"> 
       @for (int i = 0; i < Model.items.Count()/3; i++) 
       { 
        <div class="row"> 
        @foreach (var item in Model.items.Skip(i *   3).Take(3)) 
       { 
        <div class="col-md-4 col-sm-6 col-xs-12"> 
         <img src="@Url.Content(item.ImagePath)" alt="@item.Description" class="thumbnail" /> 
        </div> 
       } 
      </div> 
     } 
      </div> 
     </div> 
     <input type="submit" value="submit" /> 
    } 


    @section scripts 
    { 
     <script src="~/Scripts/Products.js"></script> 
    } 

ich alle Wege versucht habe, mein Modell zurück zu bekommen, wenn ich die von dem Controller

poste ich das bin Entsendung von auf Checkbox klicken Ereignis mit Ajax aus meiner products.js Datei.

aber in meiner Controller-Action-Methode zeigt es immer das ViewModel als null.

was soll ich tun? mache ich etwas falsch.

Products.js

$(function() { 
     console.log('Inside js......'); 
     $('.Categories').click(function (e) { 
      console.log(this.id, $("#" + this.id).is(":checked")); 
      $.ajax({ 
       type: "POST", 
       url: "/Home/Products", 
       success: function() { 
        console.log("ajax successfull...."); 
       }, 
       error: function() { 
        console.log("ajax error...."); 
       } 
      }); 
     }); 

    }); 
+0

Zeigen Sie Ihre Products.js –

+0

yup, wenn Sie Ihre products.js zeigen wird es hilfreich für uns –

+0

Neben der Betrogene debug.thanks (Sie 'foreach' Schleife nicht verwenden können, versuchen Sie nicht, den' Namen zu ändern Attribut. –

Antwort

0

Das ist Ihre ProductsVM:

public class ProductsVM 
{ 
    public IList<Item> items { get; set; } 
    public IList<Category> categories { get; set; } 
} 

Dies wird Ihre Aktion-Methode, auf die Sie eine Mitteilung verfassen:

[HttpPost] 
public ActionResult Products(ProductsVM model) 

Wenn Sie Ihr Formular abgesendet haben, Es nimmt die Werte aus den Steuerelementen Ihres Formulars und verwendet die Namen der Steuerelemente, es wird sie an diesendenAktion. In Ihrer Sicht (Formular) haben Sie eine Checkbox mit dem Namen chkCategory und eine versteckte Eingabe mit dem Namen Name. Wenn Sie Ihr Formular posten, sendet es chkCategory und seinen Wert und das ausgeblendete Element mit dem Namen Name. Wenn es auf der Serverseite eintrifft, sucht der MVC in Ihrem Controller nach einer Aktionsmethode mit dem Namen Products. Dann wird der Standardordner versuchen, nach chkCategory und Name Eigenschaften zu suchen, um zu sehen, ob die Aktion sie akzeptiert. Es wird es nicht finden. Dann wird es versuchen zu sehen, ob es eine ProductsVM erstellen kann und es kann nicht, weil ProductsVM 2 Eigenschaften hat: items und categories und sie nicht übereinstimmen, was Sie posten, so wird es nur wählen Sie diese Aktion und übergeben Sie es null.

Sie haben viele Probleme in Ihrem Code und es spielt nicht gut mit dem gesamten MVC-Framework. Ich schlage vor, Sie lesen Understanding MVC Model Binding und versuchen einige einfache Beispiele, um einen Hang davon zu bekommen und dann zu versuchen, was Sie tun.