Передача дополнительного значения данных в строго типизированные частичные представления в ASP.NET MVC - PullRequest
1 голос
/ 14 июня 2010

У меня есть 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 для обновления некоторых частей формы заказа, иЯ понял, что каждому из моих частичных представлений также нужен доступ к IOrderForm.OrderId.

Какой самый простой способ предоставить моим частичным пользователям доступ к этому значению?

Ответы [ 4 ]

2 голосов
/ 14 июня 2010

вы можете получить значение из вашего маршрута, используя что-то вроде

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

Или добавьте его в viewData и повторно используйте его для частичного просмотра

TempData также довольно простой способ ...

2 голосов
/ 14 июня 2010

Вам придется немного изменить свой код, но вы можете сделать это

<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 голос
/ 14 июня 2010

Существует перегрузка для RenderPartial, которая принимает как объект Model, так и словарь ViewData, поэтому потенциально вы можете просто установить значение ViewData и передать объект ViewData частичному.чтобы включить элемент Order Id в вашу частичную ViewModel, и скопировать в него Order Id.

0 голосов
/ 29 апреля 2013

Просто зависит от модели для RenderPartial, просто пропустите вашу модель.

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

, а затем внутри самого частичного представления, обычно вы можете сделать следующее:

<%= Model.VariableName %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...