2015-02-11 56 views
1

我覺得這是一個非常基本的問題。我試圖實現的是將對象的集合顯示爲鏈接。當我點擊一個鏈接時,我希望看到該特定對象的詳細信息。傳遞模型集合到行動鏈接

我可以在索引視圖中顯示項目鏈接的集合,但當單擊項目鏈接時,我可以顯示SingleProductView,但無法在其中顯示該特定項目的變量。

是否可以通過html.actionlink將特定項目傳遞給視圖?或者,是否有可能將該特定項目傳遞給另一個將顯示視圖的操作?

模型:

public class ProductModel 
{ 
    public int ProductID { get; set; } 
    public string ProductName { get; set; } 
    public string ProductDescription { get; set; } 
} 

家庭控制器:

public class HomeController : Controller 
{ 

    List<ProductModel> inventory = new List<ProductModel>() { 
     new ProductModel { ProductName = "White T-Shirt", ProductDescription = "White T-Shirt", ListPrice = 10 }, 
     new ProductModel { ProductName = "Black T-Shirt", ProductDescription = "Black T-Shirt", ListPrice = 10 }, 
    }; 

    public ActionResult Index() 
    { 
     return View(inventory); 
    } 

    [HttpGet] 
    public ActionResult SingleProductView() 
    { 
     return View(); 
    } 
} 

索引視圖:

@if(Model != null) 
     { 
      <ul> 
      @foreach (ProductModel item in Model) 
      { 
       <li> 
        @Html.ActionLink(item.ProductName, "SingleProductView") 
       </li> 
      } 
      </ul> 
     } 

回答

1

當你說return View();,你是不是傳遞一個模型。它是空的。因此,檢索一個模型(通常來自數據庫,但在您的情況下只使用實例字段)並將其傳遞給視圖。

[HttpGet] 
public ActionResult SingleProductView(int id) 
{ 
    //From the inventory, retrieve the product that has an ID that matches the one from the URL (assuming default routing) 
    //We're using Linq extension methods to find the specific product from the list. 
    ProductModel product = inventory.Where(p => p.ProductId == id).Single(); 

    //Send that product to the view. 
    return View(product); 
} 

您的看法應接受ProductModel作爲模型類型。

@* Declare the type of model for this view as a ProductModel *@ 
@model ProductModel 

@* Display the product's name in a header. Model will be an instance of ProductModel since we declared it above. *@ 
<h2>@Model.ProductName</h2> 

@* Display the product's description in a paragraph *@ 
<p>@Model.ProductDescription</p> 

你不通過從索引視圖到其他視圖的產品,你通過ID在URL中,這將成爲該行動方法的參數(假設你使用默認的路由) 。改變你的鏈接,這在你的索引視圖:

@Html.ActionLink(item.ProductName, "SingleProductView", new {Id = item.ProductId}) 

ProductModel說你有一個ProductId財產,不得ListPrice財產。我認爲你需要添加一個public double ListPrice {get; set;},然後當你創建你的庫存,分配的ID,例如:

List<ProductModel> inventory = new List<ProductModel>() { 
    new ProductModel { ProductId = 1, ProductName = "White T-Shirt", ProductDescription = "White T-Shirt", ListPrice = 10 }, 
    new ProductModel { ProductId = 2, ProductName = "Black T-Shirt", ProductDescription = "Black T-Shirt", ListPrice = 10 }, 
}; 

的URL訪問產品與1應(假設默認的路由)/Home/SingleProductView/1的ID。

順便說一句,你應該重命名ProductModelProduct。這使它更清潔一點。並將ProductName重命名爲Name。看看區別:ProductModel.ProductName vs Product.Name。兩者都一樣清楚,但其中一種更簡潔。