1

次のコントローラーがあります。

[HttpGet]
public ActionResult Create(int setId)
{
    // create new viewModel
    var model = new CreateCardViewModel() {SetId = setId};

    return View(model);
}

[HttpPost]
public ActionResult Create(CreateCardViewModel viewModel)
{
    if (ModelState.IsValid)
    {
        var set = _db.Sets.Single(s => s.SetId == viewModel.SetId);
        var card = new Card
            {
                Set=set, 
                SetId = set.SetId, 
                Sides = viewModel.Sides, 
                DateCreated = viewModel.DateCreated, 
                IsReady = viewModel.IsReady, 
                Stage = viewModel.Stage
            };
        set.Cards.Add(card);

        _db.Save();

        return RedirectToAction("detail", "set", new {setId = viewModel.SetId});
    }
    return View(viewModel);
}

次の ViewModel を使用します。

public class CreateCardViewModel
    {
        public CreateCardViewModel()
        {
            DateCreated = DateTime.Now;
            Sides = new List<Side> {new Side() {Stage = 0, IsFront = true, IsReady = false, Content = "Blank Side"}};
            Stage = 0;
            IsReady = true;
        }

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

    [Required]
    public IList<Side> Sides { get; set; }

    [Required]
    public int Stage { get; set; }

    [Required]
    [DataType(DataType.Date)]
    [HiddenInput(DisplayValue = false)]
    public DateTime? DateCreated { get; set; }

    [Required]
    public bool IsReady { get; set; }

}

ただし、ビューからポストバックすると、ビューからデータがViewModel表示されないため、データがコントローラーに返されません。にリストすることなく、これらのデフォルト値を作成する最良の方法は何Viewですか? ビューにパラメーターをリストするのは、洗練されていないように思えます。おそらく、これらのデフォルト値をController?

私の見解はここにあります:

@model Project.Models.CreateCardViewModel

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>CreateCardViewModel</legend>

        @for (var i = 0; i < Model.Sides.Count; i++)
        {
            <h3>Side @(i+1)</h3>
            @Html.EditorFor(x => x.Sides[i].Content)
        }

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

0 に答える 0