В ASP.NET MVC обычно предпочитают использовать метод, отличный от Session
, для хранения данных. Session
лучше всего использовать для многоэкранных мастеров , где результаты предыдущего представления / действия применимы к следующему представлению / действию.
Я дам вам «быстрый» ответ; и затем отредактирую мой ответ позже, чтобы обеспечить «лучший» подход.
Похоже, вы добавляете несколько линий продуктов в класс Detail
, не удаляя предыдущие.
Если это список, но вы не хотите показывать больше, чем один, почему у вас он есть в List
?
Прямо сейчас вы AddItem
не удалив предмет из Session
.
удалить что-то из Session
; вам нужно добавить это в соответствующем месте:
var detail = (Detail)Session["Detail"];
detail.RemoveOlderItems(product);
Session["Detail"] = detail;
С RemoveOlderItems
Выглядит так:
public void RemoveOlderItems(Product product)
{
List<DetailLine> lines = lineCollection
.RemoveAll(g => g.Product.ProductId != product.ProductId);
lineCollection = lines;
}
Трудно сказать, что вы пытаетесь показать (я думаю, что отчасти мне трудно понять, что показывают снимки экрана, поскольку это не на моем родном языке; но я следую как можно лучше). Но у меня есть еще несколько уточняющих комментариев и вопросов:
На каком уровне абстракции должен быть вид? Detail
заполнено ProductLines
? Вы хотите показать несколько линеек продуктов? На основе скриншотов, которые вы показали, вы действительно хотите показать только один. Если вам нужен только один, тогда я бы полностью исключил идею List
и в деталях был бы один ProductLine
.
Если вы сможете уточнить, каков конечный результат, к которому вы стремитесь, и почему у вас есть List
, где кажется, что вы хотите показать только один результат, это поможет.