0

私は編集アクションを考え出そうとしています。私がこれまでに持っているものについては、以下を参照してください。

ビューモデル:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace GlobalUnitedSC.WebUI.Models
{
public sealed class CreateMensPlayerViewModel
{
    //Player profile starts here

    [HiddenInput(DisplayValue=false)]
    public int MensTeamId { get; set; }

    [HiddenInput(DisplayValue = false)]
    public int PlayerId { get; set; }

    [Required]
    public string Name { get; set; }

    [DataType(DataType.Date)]
    public DateTime? BirthDate { get; set; }

    [Required]
    public string Position { get; set; }

    public int ShirtNumber { get; set; }

    [DataType(DataType.Date)]
    public DateTime? Joined { get; set; }

    public string Country { get; set; }

    [DataType(DataType.MultilineText)]
    public string Description { get; set; }

    public byte[] ImageData { get; set; }

    [HiddenInput(DisplayValue = false)]
    public string ImageMimeType { get; set; }

    [DataType(DataType.EmailAddress)]
    public string EmailAddress { get; set; }

    [DataType(DataType.PhoneNumber)]
    public string PhoneNumber { get; set; }

    //Player Statistics starts here
    public int Games { get; set; }
    public int Goals { get; set; }
    public int Assists { get; set; }
    public int TotalShots { get; set; }
    public int ShotsOnGoal { get; set; }
    public int FoulsDrawn { get; set; }
    public int FoulsCommitted { get; set; }
    public int Saves { get; set; }
    public int BlueCards { get; set; }
    public int YellowCards { get; set; }
    public int RedCards { get; set; }
 }
}

アクションの作成:

    [HttpGet]
    public ActionResult Create(int mensTeamId)
    {
        new CreateMensPlayerViewModel {MensTeamId = mensTeamId};

        return View();
    }

    [HttpPost]
    public ActionResult Create(CreateMensPlayerViewModel viewModel, HttpPostedFileBase  image)
    {
        if (ModelState.IsValid)
        {
            var mensTeam = _dataSource.MensTeams.Single(t => t.Id == viewModel.MensTeamId);
            var mensPlayer = new MensPlayer
                                 {
                                     Name = viewModel.Name,
                                     BirthDate = viewModel.BirthDate,
                                     Position = viewModel.Position,
                                     ShirtNumber = viewModel.ShirtNumber,
                                     Joined = viewModel.Joined,
                                     Country = viewModel.Country,
                                     Description = viewModel.Description,
                                     EmailAddress = viewModel.EmailAddress,
                                     PhoneNumber = viewModel.PhoneNumber,
                                     Games = viewModel.Games,
                                     Goals = viewModel.Goals,
                                     Assists = viewModel.Assists,
                                     TotalShots = viewModel.TotalShots,
                                     ShotsOnGoal = viewModel.ShotsOnGoal,
                                     FoulsDrawn = viewModel.FoulsDrawn,
                                     FoulsCommitted = viewModel.FoulsCommitted,
                                     Saves = viewModel.Saves,
                                     BlueCards = viewModel.BlueCards,
                                     YellowCards = viewModel.YellowCards,
                                     RedCards = viewModel.RedCards
                                 };

            mensTeam.MensPlayers.Add(mensPlayer);

            _dataSource.Save();
            TempData["message"] = string.Format("{0} has been saved", mensPlayer.Name);

            return RedirectToAction("detail", "MensTeam", new {id =         viewModel.MensTeamId});
        }

        return View(viewModel); 
    }

HttpGet 編集アクション

[HttpGet]
    public ActionResult Edit (int id)
    {
        var mensPlayer = _dataSource.MensPlayers.FirstOrDefault(p => p.Id == id);

        return View(mensPlayer);
    }

HttpPost Edit アクション、できれば上記のモデル クラスに基づくアクションを手伝ってくれる人はいますか?

以下の行と何か関係があることを期待していましたが、これが新しいプレーヤーを作成する場合、そのプレーヤーを編集するには何を書くことができますか?

var mensPlayer = new MensPlayer {}
4

2 に答える 2

1

投稿なので、メソッドは作成メソッドと同じです。MensPlayer をパラメーターとして受け取ります。

モデルが有効かどうかを確認し(検証など)、エントリに変更済みのフラグを付けて変更を保存します。

[HttpPost]
public ActionResult Edit(MyModel myModel)
{
    if (ModelState.IsValid)
    {
        DbContext.Entry(myModel).State = EntityState.Modified;
        DbContext.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(myModel);
}

DBContext

public class ModelContext : DbContext
{
    public DbSet<MyModel> MyModelSet{ get; set; }
}

DBContext に関する詳細情報

于 2012-10-18T08:04:43.767 に答える
0

この質問の再投稿または拡張のコメントで Slauma の助けを借りて:

再投稿/延長

これは彼が私に提案したことであり、うまくいきます。

IDataSource インターフェイスに追加:

 void Update(MensPlayer mensPlayer);

Db クラスに実装された更新:

void IDataSource.Update(MensPlayer mensPlayer)
    {
        Entry(mensPlayer).State = EntityState.Modified;
    }

アクションの編集:

[HttpPost]
    public ActionResult Edit(MensPlayer mensPlayer)
    {
        if (ModelState.IsValid)
        {
            //Save Player
            _dataSource.Update(mensPlayer);
           _dataSource.Save();

           TempData["message"] = string.Format("{0} has been saved", mensPlayer.Name);
            return RedirectToAction("Detail", "MensPlayer", new {id = mensPlayer.Id});
        }
        return View(mensPlayer);
    }

そして、私は Save で行ったように、DbSet 全体に Update を実装すると想定していましたが、すべて正常に動作します。

于 2012-10-18T22:07:36.167 に答える