まず、私はこれに非常に慣れていないので、これが他の場所で答えられた簡単な質問である場合は、そこにリンクしてください。誰の時間も無駄にしたくありません(投稿する前に長い間検索してみました)。
そのため、MVC3 プロジェクトでデータベース (EntityFramework を使用) の情報を更新する際に問題が発生しています。次のようなプロファイルコントローラーがあります(現在、静的情報とnullable intをテスト用に使用しています)。
public ViewResult Edit(int? memberID)
{
Member member = repository.Members.GetMember(12985);
return View(new ProfileEditViewModel
{
MemberID = member.id,
FirstName = member.fname,
LastName = member.lname,
HomePhone = member.home_phone,
CellPhone = member.cell_phone,
Address = member.street,
City = member.city,
State = member.state,
Zip = member.zip,
Email = member.email,
Sex = member.sex,
MemberType = member.membertype,
TypeOfCar = member.typeofcar
});
}
次に、次のように始まる強く型付けされたビューを取得しました。
@using (Html.BeginForm()) {
<div class="editor-label">
<label for="fname">First Name:</label>
</div>
<div class="editor-field">
@Html.EditorFor(model => model.FirstName)
@Html.ValidationMessageFor(model => model.FirstName)
</div>
そして、MemberID を除く ViewModel の各属性のフォームを下に文字列化します。で締めます
<p>
<input type="submit" value="Save" />
@Html.ActionLink("Cancel", "Summary")
</p>
コントローラーに戻ると、補完的な方法があります。
[HttpPost]
public ActionResult Edit(ProfileEditViewModel memberViewModel)
{
Member member = repository.Members.GetMember(memberViewModel.MemberID);
if (ModelState.IsValid)
{
member.fname = memberViewModel.FirstName;
member.lname = memberViewModel.LastName;
member.home_phone = memberViewModel.HomePhone;
member.cell_phone = memberViewModel.CellPhone;
member.street = memberViewModel.Address;
member.city = memberViewModel.City;
member.state = memberViewModel.State;
member.zip = memberViewModel.Zip;
member.email = memberViewModel.Email;
member.sex = memberViewModel.Sex;
member.membertype = memberViewModel.MemberType;
member.typeofcar = memberViewModel.TypeOfCar;
repository.Members.UpdateMember(member);
return RedirectToAction("Summary");
}
else
{
//there is something wrong with the data
return View(member);
}
問題は、メンバーの情報を更新しようとすると、「シーケンスに要素が含まれていません」というエラーが表示されることです。更新ページにアクセスできたので、指定したメンバー ID が有効であることはわかっていて、UpdateMember を知っているにもかかわらずです。プロジェクトのこの部分が始まる前に完全にテストされているため、メソッドは正しく機能します。更新のどこが間違っていますか?