0

Using EF with MVC4 allows you to specify the inclusion of Foreign Key columns in the model. While this not normally part of OR modeling, it does allow MVC4 to automatically generate views with dropdown lists, for the foreign key relationships, when you generate a controller with the MVC controller with read/write actions and views, using Entity Framework option.

I have hit a problem creating an object in this scenario.

Greatly simplified, the models in question are:

Questionnaire:

  • QuestionnaireID: PK
  • CandidateId: FK
  • Candidate: Associated object

Candidate:

  • CandidateID: PK
  • Name: string

The problem I have hit is that on a Create view post-back to create a new Questionnaire ModelState.IsValid is false. On investigation the error listed is The parameter conversion from type 'System.String' to type 'Data.Candidate' failed because no type converter can convert between these types.

ModelState.Keys includes Questionnaire.Candidate as well as Questionnaire.CandidateId (which is valid).

I am sure this is something simple, but would like to hear some solutions. The viewbag only has a set for the drop-down list and the view has an @model of type @model Data.Questionnaire. There are no editor fields bound to Questionnaire.Candidate..

4

1 に答える 1

0

組み込みの EF モデルが MVC で生成されたスキャフォールディングを好まない理由がわからないため、外部キー列を有効にしてポストバックを作成するために、より安全なソリューションに戻りました (失敗する理由を聞いてまだ満足しています) -ボックス):

作成などの特定の機密操作用に個別のビュー モデルを作成する

理論的には、EF ドメイン エンティティをビューモデルとして使用すると、次のような多くの問題があると考えられます。

  • あまりにも多くの情報を公開したり、追加のフィールドがポストバックされる可能性があります
  • 検証テキストはインターフェイスの問題であり、データ モデルの一部であってはなりません (実際には、ビューモデルでさえこのテキストの場所ではないことを示唆していますが、余談です)。

したがって、基本的に、新しいインスタンスに適切な値を選択するために必要なフィールドのみを持つ CreateCandidateQuestionnaireVM クラスが作成されました。

于 2013-07-09T14:46:59.250 に答える