5

Bu Varlık Framework Kod Önce kullanılarak eşleştirilmiş sınıfları Kişinin bir Adres içindeki tüm Kişi özelliklerini sadece bir Formda doldurması için?ASP.NET MVC 3 Tek-çok Formu

@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>Person</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Name) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Name) 
      @Html.ValidationMessageFor(model => model.Name) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Adresses.FirstOrDefault().Street) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Adresses.FirstOrDefault().Street) 
      @Html.ValidationMessageFor(model => model.Adresses.FirstOrDefault().Street) 
     </div> 

     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 
} 

Bu veritabanından Caddesi ile girdileri göstermek için çalışıyor, ancak ben ne zaman, Sokak doesnt Değişikliği göndermek. Bu arada model bağlayıcı koleksiyonlarını düzeltmek için olduğundan alakalı kimlikleri var olmadığından

[HttpPost] 
public ActionResult Edit(int id, FormCollection formCollection) 
{ 
    Person person = unityOfWork.PersonRepository.GetById(id); 

    UpdateModel<Person>(person); 

    if (ModelState.IsValid) 
    { 
     unityOfWork.PersonRepository.Update(person); 
     unityOfWork.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    return View(person); 
} 

cevap

3

, bu mücadele edilecektir.

Bu ekran için bir ViewModel oluşturmak ve onunla altta yatan etki alanı modeli arasında çeviri yapmak daha iyi olur.

Tüm adresleri düzenlemek için bir tesis sağlıyorsanız, Steve Sanderson's BeginCollectionItem helper kullanıyorum. Ancak, yalnızca tek bir adresi düzenlediğinizden, bir Kişi özelliği ve ayrı Adres özelliği olan yeni bir ViewModel sınıfı daha kolay olabilir veya bu görünümle ilgili Kişi ve Adres özelliklerini içeren bir sınıfı kullanabilirsiniz.

Endişelerin Ayrılmasının büyük bir destekçisiyim. Uygulamanızda mantıklı üç model var; Veritabanınızdaki veri depolamanın uygulanmasını açıklayan Varlık modeli, UI'de veri temsilinin uygulanmasını tanımlayan Görünüm modeli ve uygulamanızdaki verilerin mantıksal temsili olan Etki Alanı modeli. Aynı modelin her amaç için, burada yaptığınız gibi kullanılması cazip. Gereksinimleriniz önemsiz hale geldiği anda, bir yük haline gelir, bu yüzden ihtiyacınız olan yerlerde en iyi şekilde çalışan sınıflar oluşturmaktan daha iyidir.