2016-04-17 10 views
3

Ich habe mein ViewModel, und ich habe meinen Controller korrekt aus dem ViewModel anzuzeigen, aber ich bin mir nicht sicher, wie ich das ViewModel bearbeitbar machen könnte, um die bearbeiteten Daten zurück zum Model zu senden. Ich möchte nur das OrderArchiveViewModel bearbeiten, nicht die DetailsC# Bearbeiten von ViewModel

ViewModel;

public class OrderArchiveViewModel 

    { 
     public int OrderId { get; set; } 
     public System.DateTime OrderDate { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string Address { get; set; } 
     public string City { get; set; } 
     public string PostalCode { get; set; } 
     public decimal Total { get; set; } 
     public bool HasBeenShipped { get; set; } 
     public List<OrderDetailArchive> Details { get; set; } 
    } 

    public class OrderDetailArchive 
    { 
     public string Title { get; set; } 
     public string Colour { get; set; } 
     public int Quantity { get; set; } 
     public decimal UnitPrice { get; set; } 
    } 

Steuerung;

[Authorize(Roles = "Administrator")] 
    public ActionResult Index() 
    { 

     List<T_shirt_Company_v3.ViewModels.OrderArchiveViewModel> list = (from o in new TshirtStoreDB().Orders 
          .OrderBy(o => o.OrderDate) 
          .Select(o => new OrderArchiveViewModel() 
          { 
           OrderId = o.OrderId, 
           Address = o.Address, 
           FirstName = o.FirstName, 
           LastName = o.LastName, 
           City = o.City, 
           OrderDate = o.OrderDate, 
           PostalCode = o.PostalCode, 
           Total = o.Total, 
           HasBeenShipped = o.HasBeenShipped, 
           Details = (from d in o.OrderDetails 
              select new OrderDetailArchive 
              { 
               Colour = d.Product.Colour, 
               Quantity = d.Quantity, 
               Title = d.Product.Title, 
               UnitPrice = d.UnitPrice 
              }).ToList() 
          }).ToList()select o).ToList(); 

     ViewBag.ShippedMessage = list.Where(w => w.HasBeenShipped).Any() ? "Order has been shipped" : "Order is being processed"; 

     return View(list); 
    } 
+0

Das typische Muster besteht darin, eine Aktualisierungsaktion für Ihren Controller zu erstellen. Es würde sein eigenes Ansichtsmodell haben, in dem Sie die editierbaren Felder auswählen. Dann müssen Sie Ihrem Raster, das mit dieser Aktion verknüpft ist, eine Bearbeitungsschaltfläche hinzufügen. Selben für erstellen, löschen. Siehe http://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/implementing-basic-crud-functionality-with-the- entity-framework-in-asp -net-mvc-application –

Antwort

1

Ich kann Ihnen vorschlagen, zwei weitere Aktionen zu machen.

public ActionResult Edit(int id) 

, wo Sie die Order durch seine Id erhalten wird, eine Karte zu ViewModel und es in die Ansicht übergeben, wo Sie Textfelder für die Bearbeitung haben wird. Erstellen Sie eine andere Aktion für die Annahme von Post-Anforderung mit aktualisierten Modell:

[HttpPost] 
public ActionResult Edit(OrderArchiveViewModel model) 

Wenn das der Bearbeitungsseite abgegeben wird Du mit den neuen Daten ein aktualisiertes Modell hat, dann Ihr Modell in der Datenbank von Id zu finden und die Eigenschaften zu aktualisieren.

+0

Ich würde sie nicht Index() nennen - das bedeutet eine Sammlung. –

1

Können Sie den Code Ihrer Ansicht senden, um weitere Informationen zu erhalten?

Die bereits gegebene Antwort könnte durch Redirect auf eine Seite zur Bearbeitung erfolgen.

Möchten Sie die Bearbeitungsfelder über dem Raster anzeigen?

Zu diesem Zweck können Sie durch die Zuordnung der Liste vorhanden New Ansichtsmodell wie

public class NewViewModel 
{   
    public OrderArchiveViewModel OrderArchiveViewModel { get; set; } 
    public List<OrderArchiveViewModel> OrderArchiveViewModelList { get; set; } 
} 

Und Sie können Daten senden mit dieser NewViewModel zum Ansehen, die sowohl editierbare OrderArchiveViewModel in Abhängigkeit von der Id und auch die Liste der OrderArchiveViewModel hinzufügen in der Aktion Index().

Verwandte Themen