Передача всей ViewModel в DisplayTemplate? - PullRequest
1 голос
/ 08 декабря 2010

Мы делаем все возможное, чтобы НЕ использовать RenderPartial, а вместо этого использовать EditorFor и DisplayFor в 100% случаев. Однако есть один сценарий, который мы до сих пор не смогли запустить: когда частичному представлению требуется вся ViewModel или, другими словами, когда оно должно быть Html.DisplayFor(m => m, "MyTemplateThatNeedsTheEntireViewModel"). Он отлично работает, если он Html.DisplayFor(m => m.Prop, "MyTemplateThatOnlyNeedsTheOneProperty"), но мы не можем передать всю ViewModel.

Есть ли способ добиться этого, который будет работать как с DisplayFor, так и с EditorFor?

Что я вижу сейчас, так это то, что в моей разметке либо ничего (либо, возможно, пробел) не отображается. Однако и компилятор, и ReSharper, похоже, считают, что мой синтаксис просто в порядке. Изменение моего кода для вызова RenderPartial работает отлично, но я стараюсь избегать этого.

Я пробую эти три строки. RenderPartial работает отлично, EditorFors не работают (возможная разметка представляет собой пустую строку или пробел):

<% Html.EditorFor(m => m, "RetailPriceRequests/PriceRequest/PriceRequestLoadGrid"); %>
<%= Html.EditorFor(m => m, "RetailPriceRequests/PriceRequest/PriceRequestLoadGrid") %>
<% Html.RenderPartial("~/Views/Shared/EditorTemplates/RetailPriceRequests/PriceRequest/PriceRequestLoadGrid.ascx", Model); %>

1 Ответ

1 голос
/ 08 декабря 2010

Если ваш DisplayTemplate:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ExampleModel>" %>

DisplayFor(m => m, "ExampleModel")

должно работать

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ExamplePropertyModel>" %>

DisplayFor(m => m.ExampleProperty, "ExamplePropertyModel")

должно работать

Одной из проблем, с которой вы столкнулись, может быть то, что что-то не имеет значения, и в этом случае оно, вероятно, вообще не должно попадать в View, но вы можете обойти это, написав:

RenderPartial("ExampleModel", Model ?? new ExampleModel());

или

RenderPartial("ExampleModel", 
    (Model ?? new ExampleModel() { ExampleProperty = new ExampleProperty() })
        .ExampleProperty ?? new ExampleProperty());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...