Как я могу получить много значений свойств от View до Presenter в WebFormsMvp? - PullRequest
1 голос
/ 11 июня 2010

Каков наилучший способ получения ряда значений свойств бизнес-объекта из представления в докладчик на странице WebFormsMvp?

С учетом этой проблемы с источниками данных.

Вот что я предлагаю:

Сценарий таков: у меня есть бизнес-объект с именем Quote, который я хотел бы загрузить из базы данных, отредактировать и затем сохранить. У класса Quote есть куча свойств. Форма касается около 20 из этих свойств. У меня есть существующие методы для загрузки / сохранения объекта Quote в / из базы данных. Теперь мне нужно соединить все это вместе.

Итак, в обработчике View_Load моего докладчика я собираюсь сделать что-то вроде этого:

public void View_Load(object sender, EventArgs e)
{
    View.Model.Quote = quoteService.Read(quoteId);
}

А затем связать все мои элементы управления следующим образом:

<asp:TextBox ID="TotalPriceTextBox" runat="server"
    Text="<%# Model.Quote.TotalPrice %>" />

Все хорошо, данные на экране.

Затем пользователь вносит изменения и нажимает кнопку «Отправить». Вот где я не уверен.

Я создаю класс с именем QuoteEventArgs, который предоставляет 20 свойств, которые форма может редактировать. Когда View вызывает событие кнопки Submit, я устанавливаю эти свойства в значения элементов управления в коде позади. Затем поднять событие, чтобы докладчик ответил на него. Презентатор перезагружает объект Quote из базы данных, устанавливает все свойства и сохраняет его в базе данных.

Это правильный способ сделать это? Если нет, то что?

Ответы [ 2 ]

1 голос
/ 22 июня 2010

«Более хороший путь» (/ альтернатива) - использовать 2-стороннюю привязку , поэтому то, что будет передано докладчику для обработки, будет вашей цитатой объект.

Это может быть достигнуто с помощью asp: FormView в сочетании с mvp: PageDataSource , который задает UpdateMethod и Bind () метод.

Пример проекта WebFormsMVP демонстрирует это с помощью 'EditWidgetControl', включая методы, необходимые для файла View code-behind.

В качестве опции ваше представление может просто реализовать только EditItemTemplate для asp: FormView с использованием DefaultMode = "Edit" в FormView .

Структура образца:

<asp:FormView DataSourceID="theSource" DefaultMode="Edit">
    <EditItemTemplate>
        <fieldset>
            <asp:TextBox id="totp" value='<%# Bind("TotalPrice") %>' runat="server" />
        </fieldset>
    </EditItemTemplate>
</asp:FormView>

<mvp:PageDataSource ID="theSource" runat="server"
    DataObjectTypeName="Your.NameSpace.Quote"
    UpdateMethod="UpdateQuote">
</mvp:PageDataSource>

Код-за:

public void UpdateQuote(Quote q, Quote ori)
{
    OnUpdatingQuote(q, ori);
}

public event EventHandler<UpdateQuoteEventArgs> UpdatingQuote;

private void OnUpdatingQuote(Quote q, Quote ori)
{
   if (UpdatingUserGroup != null)
   {
       UpdatingUserGroup(this, new UpdateQuoteEventArgs(q, ori));
   }
}
0 голосов
/ 08 июля 2013

Как использовать GridView внутри FormView. Потому что у меня есть список для заполнения сетки в сущности.

...