Я подошел к, даже не идеальному, приемлемому решению, используя Символ времени выполнения для хранения корневого пути проекта как свойства объекта process
.
Используя символ для присвоения имени этому свойству, мы избегаем любой возможности столкновения с другими
blockquote>process
свойствами объекта, даже с будущими.Я просто добавил эти две строки в мой
app.js
(который в проектах Express помещается в корневой каталог проекта и требуется из главной точки входа приложенияbin/www
, где я также убедился, что это первая необходимая зависимость):const $root = Symbol.for("projectRoot"); │ return new Promise(function (resolve, reject) { process[$root] = __dirname;
После этого единственное, что мне нужно сделать во всех остальных модулях, это повторить первую строку в самом начале:
const $root = Symbol.for("projectRoot");
.. .и использовать его во всех инструкциях . Например:
const helper = require(process[$root]+"/lib/util/helpers.js
Может быть, это далеко от совершенства, но это работает для меня ...
Я еще не попробовал DefaultModelBinder за составные типы, но Вы могли всегда использовать MvcContrib CastleBind (одолженный от Проект Замка), который дает Вам составной тип, связывающий легко, включая массивы.
Самое близкое я думаю, что это прибудет, переопределяет ToString()
метод в классе очень еще для вывода значимой информации к DropDownList - но не.
Вы можете связывать набор IEnumerable с DropDownList и затем получением его SelectedItem, когда форма отправлена - который является самым дешевым способом, которым я могу думать.
Пожалуйста, проверьте это , поскольку я думаю, что это говорит о вашем вопросе, кажется, что ребята из S # arp решили его, и его легко "разорвать", если вы не используйте их материалы.
В любом случае, я думаю, что несколько опасно автоматически загружать объекты из того, что публикует пользователь ... придется подумать об этом.