C # / Asp.NET: Есть ли преимущество установки данных в ViewData / ViewBag каждый запрос по сравнению с вызовом метода действия для получения данных?

Проверенное решение на основе принятого ответа:

mongodbutil.js:

var MongoClient = require( 'mongodb' ).MongoClient;
var _db;
module.exports = {
  connectToServer: function( callback ) {
    MongoClient.connect( "<connection string>", function( err, client ) {
      _db = client.db("<collection name>");
      return callback( err );
    } );
  },
  getDb: function() {
    return _db;
  }
};

app.js :

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var app = express();
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

var mongodbutil = require( './mongodbutil' );
mongodbutil.connectToServer( function( err ) {
  //app goes online once this callback occurs
  var indexRouter = require('./routes/index');
  var usersRouter = require('./routes/users');
  var companiesRouter = require('./routes/companies');
  var activitiesRouter = require('./routes/activities');
  var registerRouter = require('./routes/register');  
  app.use('/', indexRouter);
  app.use('/users', usersRouter);
  app.use('/companies', companiesRouter);
  app.use('/activities', activitiesRouter);
  app.use('/register', registerRouter);  
  // catch 404 and forward to error handler
  app.use(function(req, res, next) {
    next(createError(404));
  });
  // error handler
  app.use(function(err, req, res, next) {
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};
    res.status(err.status || 500);
    res.render('error');
  });
  //end of calback
});

module.exports = app;

activities.js - маршрут:

var express = require('express');
var router = express.Router();
var mongodbutil = require( '../mongodbutil' );
var db = mongodbutil.getDb();

router.get('/', (req, res, next) => {  
    db.collection('activities').find().toArray((err, results) => {
        if (err) return console.log(err)
            res.render('activities', {activities: results, title: "Activities"})
    });
});

router.post('/', (req, res) => {
  db.collection('activities').save(req.body, (err, result) => {
    if (err) return console.log(err)
    res.redirect('/activities')
  })
});

module.exports = router;

0
задан Daniel A. White 16 January 2019 в 16:11
поделиться

2 ответа

Вы можете попробовать это

public class GlobalViewBagFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
       filterContext.Controller.ViewBag.UserImage = "Your Image Path";
    }
}

Добавить его в FilterConfig в папке App_start

 public class FilterConfig
 {
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
       filters.Add(new GlobalViewBagFilter ());
    }
  }

Теперь вы можете получить ViewBag.UserImage _Layout в вашем приложении.

0
ответ дан Aminur Rahman 16 January 2019 в 16:11
поделиться

Ну, если вы установите данные в ViewBag / ViewData, эти данные будут обрабатываться во время генерации вашей страницы. Если вы создадите специальный метод действия, это будет означать всего один дополнительный запрос к веб-серверу. Поскольку путь короткий и связанные данные крошечные, вызов метода дополнительного контроллера должен быть немного медленнее.

0
ответ дан Nick 16 January 2019 в 16:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: