Монгоид необязательный встроенный интерфейс модели [дубликат]

TL; DR: Попробуйте использовать Html.Partial вместо Renderpage


Я получал Object reference not set to an instance of an object, когда пытался сделать вид в представлении, отправив ему модель, например это:

@{
    MyEntity M = new MyEntity();
}
@RenderPage("_MyOtherView.cshtml", M); // error in _MyOtherView, the Model was Null

Отладка показала, что модель была Null внутри MyOtherView. Пока я не сменил его на:

@{
    MyEntity M = new MyEntity();
}
@Html.Partial("_MyOtherView.cshtml", M);

И это сработало.

Кроме того, причина, по которой я не имел Html.Partial для начала, заключалась в том, что Visual Studio иногда выдает ошибки, (f9), если он находится внутри другого построенного цикла foreach, хотя это не ошибка:

@inherits System.Web.Mvc.WebViewPage
@{
    ViewBag.Title = "Entity Index";
    List<MyEntity> MyEntities = new List<MyEntity>();
    MyEntities.Add(new MyEntity());
    MyEntities.Add(new MyEntity());
    MyEntities.Add(new MyEntity());
}
<div>
    @{
        foreach(var M in MyEntities)
        {
            // Squiggly lines below. Hovering says: cannot convert method group 'partial' to non-delegate type Object, did you intend to envoke the Method?
            @Html.Partial("MyOtherView.cshtml");
        }
    }
</div>

Но я смог запустить приложение без проблем с этим " ошибка". Я смог избавиться от ошибки, изменив структуру цикла foreach, чтобы выглядеть так:

@foreach(var M in MyEntities){
    ...
}

Хотя я чувствую, что это потому, что Visual Studio неправильно интерпретировала амперсанды и скобки .

1
задан demas 13 April 2012 в 13:36
поделиться

1 ответ

В нашем проекте у нас была аналогичная вещь. Мы создали поля как модуль. Немного похоже на это:

module SpecialFields
  extend ActiveSupport::Concern

  included do
    field :my_field, type: String
    field :my_other_field, type: String
  end
end

Затем в вашем классе, где вы хотите вставлять, просто выполните:

include SpecialFields

В вашем классе, который вы хотели бы сохранить отдельно, как не-внедренный документ, сделайте следующее:

class NotEmbeddedDoc
  include Mongoid::Document

  include SpecialFields
end

Это очень хорошо отразилось на нашем проекте для нескольких вещей. Однако это может быть неприемлемо в вашем случае, поскольку вы хотите внедрить многие. Это только действительно работает для встраивания в один случай, я думаю. Я разместил его здесь, если он помогает людям.

0
ответ дан OzBandit 26 August 2018 в 02:43
поделиться
Другие вопросы по тегам:

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