MVC3をC#とRazorと共に使用し、EF4をコードで使用して、ユーザーを作成して操作できるサイトを作成します。MCV3エンティティフレームワーク4コードファースト:ユーザーの複数の電子メールの編集
public class User
{
[Key]
public int Id { get; set; }
public string User_Name { get; set; }
public string Password { get; set; }
public string First_Name { get; set; }
public string Last_Name { get; set; }
public virtual ICollection<Email> Emails { get; set; }
}
public class Email
{
[Key]
public int Id { get; set; }
public string Address { get; set; }
public User User { get; set; }
}
User
/Email
関係は明らかである「1対多」:その非常にシンプル、かつオブジェクトの唯一の2種類があります。私はUser
オブジェクトのCRUD関数を設定しており、(ほとんどの場合は)動作します。私はすべての自分の電子メールアドレスも編集できるように、ユーザーの編集ページを作っています。 (私は、彼らはまだなく、かなりそこに近い私を得たが、これに似た記事を見てきました)
マイEdit
ビュー持つすべてが、私は、この持っているEmails
、作業用のエディタ:
<div class="editor-label">
@Html.LabelFor(model => model.Emails):
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Emails)
@Html.ValidationMessageFor(model => model.Emails)
</div>
@model LoginTest.Models.Email
@Html.HiddenFor(model => model.Id)
<div class="email-editor-field">
@Html.EditorFor(model => model.Address)
@Html.ValidationMessageFor(model => model.Address)
</div>
結果は右に見えるのユーザーの電子メールアドレス、のそれぞれのテキストボックスでレンダリングされたページであることが、非常に仕事をdoesntの:@Html.EditorFor(model => model.Emails)
は、次のようになります~/Views/Shared/EditorTemplates/Email.cshtml
を追加しています。ここにhtmlがあります:
<div class="editor-label">
<label for="Emails">Email Address(es)</label>:
</div>
<div class="editor-field">
<input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." id="Emails_0__Id" name="Emails[0].Id" type="hidden" value="1" />
<div class="email-editor-field">
<input class="text-box single-line" data-val="true" data-val-regex="Please enter a valid email address" data-val-regex-pattern=".+\@.+\..+" data-val-required="The Address field is required." id="Emails_0__Address" name="Emails[0].Address" type="text" value="[email protected]" />
<span class="field-validation-valid" data-valmsg-for="Emails[0].Address" data-valmsg-replace="true"></span>
</div>
<br />
<input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." id="Emails_1__Id" name="Emails[1].Id" type="hidden" value="2" />
<div class="email-editor-field">
<input class="text-box single-line" data-val="true" data-val-regex="Please enter a valid email address" data-val-regex-pattern=".+\@.+\..+" data-val-required="The Address field is required." id="Emails_1__Address" name="Emails[1].Address" type="text" value="[email protected]" />
<span class="field-validation-valid" data-valmsg-for="Emails[1].Address" data-valmsg-replace="true"></span>
</div>
<br />
<span class="field-validation-valid" data-valmsg-for="Emails" data-valmsg-replace="true"></span>
</div>
もう一度私は正しいと思った。しかしながら!フォームが送信されると、電子メールへの変更は無視されます。私は私が私のコントローラから何かが欠けていますことを推測ので、私はここにもいることを投稿します:
[HttpPost]
public ActionResult Edit(int id, User User)
{
try
{
db.Entry(User).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
それは素晴らしいです!私は何かが簡単でないことを知っていた。あなたは電子メールの追加/削除を容易にする最良の方法は何ですか?私はそこに私は[ここ](http://jarrettmeyer.com/post/2995732471/nested-collection-models-in-asp-net-mvc-3)の方法を実装するに刺すようにするつもりです – Ben
@ベン:の私は通常このような手順を使用しています:http://stackoverflow.com/a/5540956/270591( "親"をユーザと "子供"に置き換えます)この例では電子メールで送信します)。 – Slauma