2017-06-14 31 views
0

我是從桌面網絡新手。查看不返回多個列表在Asp.net MVC

我有兩個模型。

第一

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

和第二是

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

並把它傳遞給我的視圖

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

} 

一個ViewModel和我的控制器的操作方法是這樣的

[HttpGet] 
    public ActionResult Products() 
    { 
     ViewBag.Message = "...Products..."; 

     ProductsVM productsVm = new ProductsVM(); 
     productsVm.items = db.Items.ToList(); 
     productsVm.categories = db.Categories.ToList(); 
     return View(productsVm); 
    } 

    [HttpPost] 
    public ActionResult Products(ProductsVM model) 
    { 
     ViewBag.Message = "...Categories..."; 



     return View(model); 
    } 

我已經用它在我看來,這樣的

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

我已經嘗試了所有讓我的模型回來時,我從到控制器發佈方式

我是從上覆選框點擊張貼使用我的products.js文件中的ajax事件。

但在我的控制器操作方法中,它始終顯示ViewModel爲空。

我該怎麼辦?難道我做錯了什麼。

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

顯示您Products.js –

+0

燁如果你表現出你的products.js它將有助於我們debug.thanks –

+0

除了重複數據刪除(您不能使用'foreach'循環,不要試圖改變'名字'屬性。 –

回答

0

這是您的ProductsVM

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

這是你的操作方法,你要留言:

[HttpPost] 
public ActionResult Products(ProductsVM model) 

當您提交表單,它將採用表單控件中的值並使用控件的名稱,它會將它們發佈到Products行動。在您的視圖(表單)中,您有一個名稱爲chkCategory的複選框和一個名稱爲Name的隱藏輸入。當您發佈表單時,它會發送chkCategory及其值,以及名稱爲Name的隱藏項目。當它到達服務器端時,MVC將在控制器中查找名爲Products的操作方法。然後,默認活頁夾將嘗試查找chkCategoryName屬性以查看該操作是否接受它們。它不會找到它。然後它會嘗試查看它是否可以創建一個ProductsVM,並且它不能,因爲ProductsVM有兩個屬性:itemscategories並且它們與您發佈的內容不匹配,所以只會選擇該操作並將其傳遞爲null。

你在代碼中有很多問題,並且它不能很好地與整個MVC框架一起玩。我建議你閱讀Understanding MVC Model Binding並嘗試一些簡單的例子來獲得它的一個掛鉤,然後嘗試你在做什麼。