将其他数据值传递给ASP.NET MVC中的强类型部分视图

时间:2010-06-14 15:44:47

标签: c# asp.net-mvc data-binding partial-views

我有一个OrderForm域类,它有属性子类,如:

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位来更新订单表单的某些部分,并且我意识到我的每个部分视图也需要访问{{1 }}。

最简单的方法是让我的部分人员可以访问这个值吗?

4 个答案:

答案 0 :(得分: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> 

或者您可以在Action

中将OrderID分配给tempData
TempData("OrderId") = your orderIDValue

答案 1 :(得分:2)

您可以使用

之类的内容从路线获取值
this.ViewContext.RouteData.GetRequiredString["OrderId"]

或者您将其添加到viewData并重复将其传递给您的partialView

TempData也是一种非常简单的方法......

答案 2 :(得分:1)

RenderPartial有一个重载接受Model对象和ViewData字典,因此您可能只需设置一个ViewData值,并将ViewData对象传递给partial。

另一个选项是在部分ViewModel中包含Order Id成员,并将Order Id复制到其中。

答案 3 :(得分:0)

只需依靠RenderPartial模型,只需将模型传递给。

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

然后在局部视图本身内部,通常可以执行以下操作:

<%= Model.VariableName %>