У меня есть класс View (OrderView.aspx), который показывает детали заказа (имя учетной записи, дата заказа), а также список строк заказа с помощью элемента управления Repeater. Каждая строка заказа представлена в виде пользовательского элемента управления (OrderLineView.ascx), который показывает детали строки заказа (наименование товара, количество, цена). У меня есть объект модели с именем Order, который я использую в качестве источника данных для всего этого, который я передаю в качестве объекта модели для представления.
Каждый пользовательский элемент управления OrderLineView имеет кнопки Сохранить и Удалить. У меня есть кнопка Сохранить, которая отправляет содержимое формы в элементе управления OrderLine в метод Save на контроллере, а затем на RedirectToAction возвращается на ту же страницу заказа (это обновляет всю страницу, ничего об этом не сообщая). У меня есть кнопка Удалить, ссылающаяся на метод на контроллере, который пытается удалить, а затем RedirectToAction обратно на ту же страницу заказа. Однако, если удаление не удается, я хочу, чтобы небольшое сообщение об ошибке отображалось рядом с кнопкой удаления при повторном отображении страницы (помните, что для каждой строки заказа на странице есть кнопка удаления, поэтому я хочу только сообщение рядом с тот, который я нажал). Мои вопросы:
1 - Как передать эти данные из моего метода контроллера в определенный пользовательский элемент управления? Должен ли я как-то добавить его в модель? Похоже, плохая идея (так как она действительно не является частью модели).
2 - Должен ли я иметь OrderLineController для операций OrderLine, а также OrderController для операций Order? Я просто хочу знать, рекомендуется ли иметь отдельный контроллер для каждого представления.
3 - Я видел, как некоторые люди могут вызывать RedirectToAction со значением анонимного типа, например:
RedirectToAction("ViewOrder", new { Id = 1234, Message = "blabla"});
но это заставляет значение Message отображаться в строке URL. Я согласен с этим, но предпочел бы, чтобы он не показывался, если это возможно.
4 - Кроме того, для доступа к свойствам Модели из представления я постоянно делаю это:
foo(((someModelType) this.ViewData.Model).SomeProperty);
Мне это не нравится по ряду причин, одной из которых является то, что я не хочу, чтобы мое представление связывалось с типом моей модели (именно поэтому я использую ViewPage вместо ViewPage) , Я бы предпочел, чтобы у меня был такой звонок:
foo(ModelEval("SomeProperty"));
Есть ли такая вещь? Я написал свой, но хотел бы, если бы мне не пришлось.