Предположим, у меня есть два объекта: A и B, как с моделью, так и с контроллером. Пользователь находится в представлении для A, затем нажимает кнопку или что-то, что вызывает действие в контроллере A. Для этого действия требуется некоторое использование модели B. Из действия в контроллере A, я должен позвонить непосредственно на модель B, или мне нужно пройти через контроллер B, чтобы взаимодействовать с моделью B? Спасибо за прочтение.Простой вопрос о MVC
ответ
Я думаю, вы должны пройти через контроллер B, поскольку контроллер B имеет доступ к модели B.
Вы можете иметь шаблон ViewModel увидеть этот ASP.NET MVC ViewModel Pattern
Если объекты имеют отношение между ними (например, многие-ко-многим между вопросом и ответом), вы можете дать ваш объект A Model A список моделей объекта B (и наоборот)
В вашей модели класса для объекта а, это будет выглядеть так:
[Key]
[Display(Name = "Primary Key")]
public int QuestionId{ get; set; }
public virtual IList<Answer> Answers{ get; set; }
и аналогично для объекта B (Answers, который имеет IList вопросов)
Это позволяет вам называть объект B (ответ) в вашем контроллере как object.answers
или же вы его структурировали.
Вы, вероятно, придется добавить многие-ко-многим OnModelBuild()
как:
protected override void OnModelCreating(DbModelBuilder modelBuilder){
modelBuilder.Entity<Question>().HasMany(a => a.Answers).WithMany(b => b.Questions); }
Вы никогда не должны вызывать контроллер B от A, или наоборот, потому что в этом случае вы делаете приложение, будет слишком строгим! Вы всегда должны отделять свое приложение. Представьте, что вы изменили работу для метода B контроллеров, который использовался контроллером A, вы будете застревать. Лучше всего создать еще один слой, который обрабатывает все это, и контроллеры должны просто называть слои, . Например: Бизнес-уровень (BLL): Наличие UserBLL.cs -> имеет метод: Аутентификация (имя строки, строка пароль) {}
Ваш контроллер A и B могут вызвать этот слой (UserBLL.cs) и использовать его. Таким образом, приложение будет надежно и развязано. Лучше должен создать другой слой, слой репозитория (для операций Crud).
Вы можете либо создать ViewModel, содержащий обе модели
Model A {} Model B{}
ViewModel AB{
Model A;
Model B;
}
//Custom model binder if you want to pass the ViewModel
public ActionResult SomeAction(Model A, Model B) {
//Logic
//pass the ViewModel(A,B) to the View
}
Или вы можете передать управление на контроллер, который обрабатывает B логику модели. Последний сценарий, о котором я могу думать, это создание службы B, которая получает модель A и делает логику
- 1. простой вопрос о pushViewController
- 2. Простой вопрос о PHP
- 3. простой вопрос о цикле
- 4. Простой вопрос о указателях
- 5. Простой вопрос о SVN
- 6. простой вопрос о InsertOnSubmit
- 7. Простой вопрос о image_graphviz
- 8. Простой вопрос о Makefile
- 9. Простой вопрос о #import
- 10. Простой вопрос о рекурсии
- 11. Простой вопрос о TortoiseHg
- 12. Простой вопрос о сеансе
- 13. вопрос о шаблоне mvc
- 14. asp.net mvc простой вопрос
- 15. Вопрос о проверке MVC
- 16. Вопрос о классике MVC
- 17. Простой вопрос о встроенном Qt Вопрос
- 18. простой вопрос о синтаксисе php
- 19. простой вопрос о определить путь
- 20. Очень простой вопрос о массивах
- 21. Простой LINQ вопрос о Any()
- 22. Простой JQuery вопрос о .live()
- 23. Простой вопрос о базовых данных
- 24. Простой вопрос о java SimpleDateFormat
- 25. ASP.net простой вопрос о повторителе
- 26. Простой вопрос о файле (C)
- 27. простой вопрос о селекторе Jquery
- 28. простой вопрос о закрытии jQuery
- 29. ДЕЙСТВИТЕЛЬНО простой вопрос о UIViews
- 30. Простой вопрос о языке C#
Что значит «имеет только доступ»? Нет причин, чтобы это было так. –
Вы "догадываетесь"? Это то, как вы кодируете, гадая? – RPM1984
упс! удалено слово «только». – happyhardik