Использование MVC3 с C # и Razor, а также EF4 с кодом в первую очередь для создания сайта, на котором вы можете создавать и манипулировать пользователями. Это очень просто, и есть только 2 типа объектов:
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
очевидно "один ко многим". Я настроил функции CRUD для объектов User
, и они работают (в основном). Я хотел бы сделать страницу редактирования для пользователя, чтобы все его адреса электронной почты также можно было редактировать. (Я видел подобные посты к этому, они приблизили меня, но все еще не совсем там)
Мой 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>
Где @Html.EditorFor(model => model.Emails)
добавляет ~/Views/Shared/EditorTemplates/Email.cshtml
, который выглядит следующим образом:
@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>
В результате получается визуализированная страница с текстовыми полями для каждого из адресов электронной почты пользователей, которая выглядит правильно, но не совсем работает. вот 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="benmiller86@gmail.com" />
<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="benm@eras.co.uk" />
<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();
}
}