Я изучал шаблон MVP с помощью ASP.NET, но у меня были проблемы с сохранением всей логики представления в презентаторе при использовании элемента управления данными на странице ,Model-View-Presenter в ASP.NET с ListView и репитером
Этот сценарий и классы - это только пример, и реальный случай, с которым я работаю, сложнее. Будем очень благодарны за любые идеи или руководство.
Скажите, что у меня есть страница с информацией о клиенте, включая имя и адрес. Он также отображает список ордеров, использующих элемент управления ретранслятора.
public class CustomerDto {
public string Name { get; set; }
public string Address { get; set; }
public List<OrderDto> OrderList { get; set; }
}
public class OrderDto {
public int Id { get; set; }
public decimal Amount { get; set; }
public bool IsRush { get; set; }
}
Сначала я представил презентатору имя, адрес и адрес ордера на вид. В этот момент была еще какая-то логика представления, которая происходила в событии ItemDataBound ретранслятора в зависимости от значения IsRush в заказе. По-моему, эта логика не принадлежит коду, а в тестируемом классе презентатора.
public interface IOrderView {
void SetName(string name);
void SetAddress(string address);
void SetOrderList(List<OrderDto> orderList);
}
public partial class OrderPage : Page, IOrderView
{
public void SetName(string name) {
labelName.Text = name;
}
public void SetAddress(string address) {
labelAddress.Text = address;
}
public void SetOrderList(List<OrderDto> orderList) {
repeaterOrders.DataSource = orderList;
repeaterOrders.DataBind();
}
protected void repeaterOrders_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
OrderDto orderDto = e.Item.DataItem as OrderDto;
if (orderDto.IsRush) {
Label labelOrderId = (Label)e.Item.FindControl("labelOrderId");
labelOrderId.ForeColor = System.Drawing.Color.Red;
}
}
}
}
Это почти кажется, что каждый элемент в повторителе нужен свой Presenter и вид, но я не нашел подобный пример в любом месте. Я придумал пару способов сохранить всю презентационную логику в презентаторе, но все они чувствуют себя взломанными, и мне было интересно, как люди, как правило, справляются с этой ситуацией.
Спасибо!
Почему вы выбрали этот подход по ASP.NET MVC? –
Я бы предпочел работать с приложением Model 2/MVC, но я создаю новые страницы в существующем приложении. Благодарю. – celticpride