2012-07-23 52 views
0

我有一個觀點,即需要一個類型的模型發送對象從鏈接到控制器

​​

當點擊以下鏈接我要調用一個控制器,並以某種方式通過列表作爲參數傳遞給控制器​​

<a href="@Url.Action("Browse", "Home", new { docList= Model.Douments})" data-role="button" data-icon="search" class="my-btn">Available Documents</a> 

    public ActionResult Browse(List<Documentr> docList) 
     {} 

如果我不必通過查詢字符串列表我不想。

尋找幫助固定我的代碼來實現這一目標

+0

您的'Product'類是數據庫中的實體嗎?它是否有你可以參考的ID? – Ecnalyr 2012-07-23 14:01:42

回答

0

我覺得你在這個複雜,我不明白爲什麼你會想只讀數據發佈到另一個控制器操作這種方法的另一個問題是有潛力吧。超出da te點擊鏈接的時間(輕微的機會,但仍有可能)。此外,如果您的初始視圖並未實際顯示任何文檔,那麼我會將其從模型中刪除,因爲它不是必需的,例如,

public class ProductViewModel 
{ 
    public int Id { get; set; } 
    public string PartNumber { get; set; } 
    public string ShortDescription { get; set; } 
    public string LongDescription { get; set; } 
    public string ImageUrl { get; set; } 
} 

public ActionResult Product(int id) 
{ 
    var model = new ProductViewModel(); 
    ... // populate view model 
    return new View(model); 
} 
在你看來

然後鏈接到你的產品,瀏覽

@Html.ActionLink("Browse Documents", "Home", "Documents", new { id = Model.Id }) 

然後讓你的Documents行動再次拉的產品,這個時候發下來的文件

public ActionResult Browse(int productId) 
{ 
    var product = ... // get product by id 
    return View(product.Documents); 
} 

通則拇指 - 只給出它需要的視圖

+0

我如何從viewModel中通過Id獲得產品,你能告訴我那個代碼嗎? – 2012-07-23 15:03:50

+0

此外,畢竟這是同樣的性能明智的,如果我再次查詢實體模型,並再次從數據庫中獲取零件的文件? – 2012-07-23 15:05:14

+0

@NickLaMarca'我如何通過ID獲得產品 - 如何知道如何做到這一點,如果我不知道您使用的是什麼樣的ORM? 「性能相同」 - 取決於需要檢索多少數據(以及如何優化數據庫),您可能會注意到更長的延遲,但是,在頁面中存儲大量數據(就像您正在嘗試執行的操作一樣) )可能導致頁面加載延遲,所以差別可能是可以忽略的。此外,如果您擔心頁面加載時間,請查看分頁/ ajax,而不是一次性拖動所有數據。 – James 2012-07-23 15:14:25

0

您應該使用視圖模型來傳遞數據(最簡單的方法)。

或者,您可以使用自定義操作篩選器或自定義模型聯編程序as described here來實現這一目標。

您嘗試使用的方法不起作用的原因是,將List作爲參數傳遞不能通過默認模型綁定器正確處理MVC。


更新

自從看到你更新列表是一個更大的產品類的一部分,我不知道爲什麼你不只是通過ID號和產品在你的目的地的行動你的帖子? (我不知道你的實體鍵的名稱是的,但我會認爲它是「Id

您的聯繫將改變這樣的事情:

<a href="@Url.Action("DocumentList", "Home", new { id = Model.Id})" data-role="button" data-icon="search" class="my-btn">Available Documents</a> 

,你會有你的行動:

public ActionResult DocumentList (int id) 
{ 
    var product = db.Product.Find(Id); 
    return View(product.List) 
} 
+0

你能告訴我一個如何實現這個示例嗎 – 2012-07-23 13:47:44

+0

ViewModel的示例? – Ecnalyr 2012-07-23 13:48:01

+0

是的,viewModel將視圖中的複雜對象傳遞給控制器​​的情況 – 2012-07-23 13:51:57

相關問題