Как уменьшить запрос к моей базе данных? - PullRequest
1 голос
/ 11 сентября 2011

У меня есть частичное представление с видом сетки.поэтому, когда пользователь нажимает кнопку «Добавить», запрос будет перенаправлен на метод «Добавить» для UnitController.После добавления его в базу данных я должен повторно получить все данные из базы данных.Есть ли способ запретить контроллеру получать все записи базы данных?

Ниже мой текущий контроллер

public class UnitsController : Controller
{
    TList<Units> model=null;

    public ActionResult UnitsPartial()
    {
        if(model==null)
          model = database.GetAll();
        return PartialView(model);
    }

    [HttpPost]
    public ActionResult Add(Units unit)
    {
        if (ModelState.IsValid)
        {
            database.Save(unit);
            model.Add(unit);          
        }

        return PartialView("UnitsPartial", model);
    }

В последней строке я хочу использовать return PartialView("UnitsPartial", model) вместо return database.GetAll() дляпредотвратить запрос к базе данных.Но модель равна нулю в методе Add.
Мой подход правильный или нет?И почему модель является нулевой в методе add ()?
--UPDATED
в первую очередь перенаправляет управление в UnitsPartial () и правильно заполнит объект модели.после нажатия кнопки добавления элемент управления будет перенаправлен на метод Add (...), но эта модель времени равна нулю !!!в чем проблема с этим?я пытался передать model.Clone () в частичное представление
return PartialView("UnitsPartial", model.Clone());
, но результат тот же

Ответы [ 2 ]

0 голосов
/ 12 сентября 2011

Вы не можете кэшировать значения в классе контроллера, как это, используя переменные-члены. HTTP не имеет состояния, и MVC 3 следует этому подходу. Каждый отдельный вызов метода действия будет иметь новый экземпляр класса Controller с моделью, установленной на ноль.

Итак, начните с вызова database.GetAll() в обоих методах действия, а затем задайте вопрос «Как мне сделать это более эффективным».

0 голосов
/ 11 сентября 2011

Я не знаю, правильный ли это подход или нет, так как я не до конца понимаю, что вы пытаетесь сделать, но ваша модель пуста, потому что вы инициализируете ее как пустую при создании контроллера.Вы должны сделать model = new TList (), прежде чем что-то добавить к нему ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...