Как получить много значений свойств из представления в Presenter в WebFormsMvp?

Как лучше всего получить несколько значений свойств бизнес-объекта из представления в презентаторе на странице 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 вызывает событие кнопки «Отправить», я устанавливаю для этих свойств значения элементов управления в коде позади. Затем поднимите событие, на которое докладчик должен ответить. Ведущий повторно загружает объект Quote из базы данных, устанавливает все свойства и сохраняет его в базе данных.

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


person andrej351    schedule 11.06.2010    source источник


Ответы (2)


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

Этого можно достичь с помощью 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));
   }
}
person Nick Josevski    schedule 22.06.2010

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

person Lokeshkumar N    schedule 08.07.2013