0

私はこのモデルを持っています:

public class Employee {
    public int EmployeeId { get; set; }
    [Required(ErrorMessage = "Employee Name is Required.")]
    public string Name { get; set; }

    public SkillSet SkillSet { get; set; }
}

public class SkillSet {
    public int SkillSetId { get; set; }
    public string ProgrammingLanguage { get; set; }

    public int EmployeeId { get; set; }
    public Employee Employee { get; set; }
}

フォームでレンダリングされたこの部分ビューを使用する:

@Html.HiddenFor(x => x.EmployeeId)
<div class="row">
    <div class="span3"><strong>Name</strong></div>
    <div class="span2">@Html.TextBoxFor(x => x.Name, new { @class = "" })</div>
</div>
@Html.HiddenFor(x => x.SkillSet.SkillSetId)
@Html.HiddenFor(x => x.SkillSet.EmployeeId)
<div class="row">
    <div class="span3"><strong>Programming Skills</strong></div>
    <div class="span2">@Html.TextBoxFor(x => x.SkillSet.Programming, new { @class = "" })</div>
</div>

投稿用に Employee の新しいインスタンスを返すことで get からフォームに入力しますが、新しいレコードを保存しようとすると、新しいレコードがSkillSet.SkillSetId空であることに関して ModelState にエラーが発生します。

新しい親子レコードをデータベースに追加するために、ここで何が欠けていますか?

編集:私は今それを働かせました。私の問題は、フォームの非表示フィールドのレンダリングだけでした。非表示のフィールドを div に配置する必要がありましたが、それらは正常にレンダリングされ、ポストバックからデータを処理できました。

4

1 に答える 1

0

結論を引き出すのに十分なコードを投稿していませんが、これは言えます。コントローラー/ビューとモデルの間の問題ではなく、データベースの問題のようです。

あなたのスキルセットテーブル(あなたがそれを何と呼んでも)では、IDはSkillSetIdkey と identifier として定義されるべきです。

あなたのモデルで私が気づいたもう 1 つの点は、循環参照があることです (Employee は SkillSet を指し、SkillSet は Employee を指します)。Entity Framework はそれを好まず、予期しない問題を引き起こす可能性があります。ビューモデルなので問題ありませんが、データベースが同じように定義されている場合は、再定義することを検討してください。

これが解決に役立つことを願っています。

于 2012-09-23T13:31:36.010 に答える