ModelFactory в ASP.NET MVC для решения проблемы 'RenderPartial'

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

String callerMethodName = Thread.currentThread().getStackTrace()[2].getMethodName();

Обратите внимание, что вам может понадобиться заменить 2 на 1.

Другим способом может быть отправка имени метода в качестве параметра в вашем втором методе, например: -

public double method2(String callerMethodName){

}
9
задан Community 23 May 2017 в 11:48
поделиться

4 ответа

Один подход я видел этот сценарий, должен использовать фильтр действия для заполнения данных для частичного представления - т.е. подкласс ActionFilterAttribute. В OnActionExecuting, добавьте данные в ViewData. Затем просто необходимо украсить различные действия, которые используют то частичное представление с фильтром.

2
ответ дан 4 December 2019 в 22:30
поделиться

Вместо того, чтобы добавить вещи как MailingListSignup как свойство Вашего ProductModel, инкапсулируйте обоих на том же уровне в классе как ProductViewModel это похоже:

public class ProductViewModel() {
    public ProductModel productModel;
    public MailingListSignup signup;
}

Затем заставьте свое Представление быть со строгим контролем типов к ProductViewModel класс. Можно получить доступ ProductModel путем вызова Model.productModel, и можно получить доступ к использованию класса регистрации Model.signup.

Это - свободная интерпретация 'Модели Презентации Fowler' (http://martinfowler.com/eaaDev/PresentationModel.html), но я видел используемый некоторой Microsoft devs, такой как Rob Conery и Stephen Walther.

5
ответ дан 4 December 2019 в 22:30
поделиться

Существует перегрузка RenderPartial, которую я использую, которые позволяют нам, Вы указываете новый ViewData и Модель:

Код RenderPartial

Если Вы смотрите на предыдущую ссылку исходного кода MVC, а также следующее (ищите метод RenderPartialInternal):

Код RenderPartialInternal

Вы видите, если в основном копирует видеоданные, передачу создания нового Словаря, и устанавливает Модель, которая будет использоваться в управлении. Таким образом, страница может иметь Модель, но затем передать другую Модель подуправлению.

Если подсредства управления не отнесены непосредственно из основной Модели Представления, Вы могли бы добиться цели упоминания Marc Gravell для добавления пользовательской логики.

1
ответ дан 4 December 2019 в 22:30
поделиться

Один из методов, которые я пробовал было использовать строго типизированное частичное представление с интерфейсом. В большинстве ситуаций агрегированная модель представления - лучший способ, но я все же хочу поделиться этим.

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

Модель представления реализует интерфейс

 public class ProductViewModel:IMailingListSignup

Это совсем не идеально, но решает некоторые проблемы: вы все равно можете легко сопоставить свойства с вашего маршрута до модель. Я не уверен, что в противном случае у вас может быть карта параметров маршрута для свойств MailingListSignup.

У вас все еще есть проблема с заполнением Модели. Если еще не поздно, я предпочитаю делать это в OnActionExecuted. Я не понимаю, как можно заполнить модель в OnActionExecuting.

0
ответ дан 4 December 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: