2010-06-14 79 views
1

我有一個OrderForm域類,它具有財產的子類,喜歡的東西:傳遞額外的數據值強類型ASP.NET中的局部視圖MVC

interface IOrderForm 
{ 
    int OrderId { get; } 

    ICustomerDetails CustomerDetails { get; set; } 
    IDeliveryDetails DeliveryDetails{ get; set; } 
    IPaymentsDetails PaymentsDetails { get; set; } 
    IOrderDetails OrderDetails { get; set; } 
} 

我的「詳細信息」視圖是強類型從IOrderForm繼承。然後,我有呈現每一個部分強類型分:

<div id="CustomerDetails"> 
    <% Html.RenderPartial("CustomerDetails", Model.CustomerDetails); %> 
</div> 

<div id="DeliveryDetails"> 
    <% Html.RenderPartial("DeliveryDetails", Model.DeliveryDetails); %> 
</div> 

... etc 

該工程確定了這一點,但我想補充一些漂亮的AJAX位用於更新訂單的某些部分,而且我我意識到我的每個部分視圖也需要訪問IOrderForm.OrderId

讓我的部分訪問此值最簡單的方法是什麼?

+0

你有你的訂單ID在你的路線,簡單地把它從那裏... – 2010-06-14 15:51:39

回答

2

你可以使用的東西從你的路線值一樣

this.ViewContext.RouteData.GetRequiredString["OrderId"] 

或者你把它添加到您的可視數據和重用它傳遞給你的partialView

TempData的也是一個非常簡單的方法...

2

你將不得不改變你的代碼了一點,但你可以做到這一點

<div id="CustomerDetails"> 
    <% Html.RenderPartial("CustomerDetails", new {OrderID = Model.OrderID, CustomerDetails = Model.CustomerDetails}); %> 
</div> 

<div id="DeliveryDetails"> 
    <% Html.RenderPartial("DeliveryDetails", new {OrderID = Model.OrderID, DeliveryDetails = Model.DeliveryDetails); %> 
</div> 

或者你可以分配的OrderID到TempData的在行動

TempData("OrderId") = your orderIDValue 
1

沒有爲RenderPartial的重載同時接受Model對象和ViewData字典,因此可能只需設置ViewData值,並將ViewData對象傳遞給partial。

另一種選擇是在您的部分ViewModel中包含一個Order Id成員,並將Order ID複製到它。

0

只需依賴RenderPartial的模型,只需傳遞模型即可。

<% Html.RenderPartial("~/controls/users.ascx", modelGoesHere); %> 

那麼局部視圖本身內,通常你可以做到以下幾點:

<%= Model.VariableName %> 
相關問題