2016-04-17 22 views
3

私は自分のViewModelを持っていますが、ViewModelから正しく表示するためにコントローラを持っていますが、ViewModelをどのように編集可能にして、モデルに編集データを送り返すのか分かりません。私は、詳細ではなくOrderArchiveViewModelを編集したいだけです。C#編集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; } 
    } 

コントローラ;

[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

典型的なパターンは、このためにコントローラに更新アクションを作成することです。編集可能なフィールドを選択する独自のビューモデルを持ちます。次に、そのアクションにリンクする編集ボタンをグリッドに追加する必要があります。作成、削除と同じです。 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 –

答えて

1

もう1つの行動を提案することができます。あなたはそれによってOrderはIdが、ViewModelにマッピングし、編集用のテキストボックスを持っていますビューに渡します取得します

public ActionResult Edit(int id) 

。更新modelでpostのrequestをacceptingため別1 Action作成:editのpageがもしthen、new data持つ更新modelをhave Idによってdatabase内your modelをfindおよびpropertiesをupdate will submittedれる

[HttpPost] 
public ActionResult Edit(OrderArchiveViewModel model) 

+0

私はそれらをIndex()と呼ぶことはありません - それはコレクションを意味します。 –

1

あなたのビューのコードを送信してより明確にすることはできますか?

既に与えられた答えは、編集目的のページにリダイレクトすることによって行うことができます。

グリッドの上にある編集フィールドを表示しますか?この目的のために

は、あなたが

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

のような新しいのViewModelを追加することができますし、リストの存在を割り当てることにより、編集可能なIDに応じて、OrderArchiveViewModelともOrderArchiveViewModelのリストの両方を含む表示するには、このNewViewModelを使用してデータを送信することができますIndex()アクションで

関連する問題