2010-06-14 78 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 %> 
相关问题