0

私は ASP MVC にまったく慣れていないので、ばかげた質問をしていたら申し訳ありません。

ModelState は検証されません。ヌルvenue.VenueType.Typeだそうです。私はこれを正しく行っていますか?コントローラーで既に値をType指定していますが (これがベスト プラクティスかどうかはわかりません)、ModelState はこれを認識しません。

の使用について読みましたTryUpdateModel。私はそれを正しく使用していたかどうかはわかりませんが、これは成功につながりませんでした。

これにはViewModelを使用する必要がありますか? その中でどのフィールドを使用しますか?

次の 2 つのモデルがあります。

public class Venue
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    public virtual VenueType VenueType { get; set; }
    public virtual ICollection<VisitInfo> VisitInfos { get; set; }
}

public class VenueType
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Type { get; set; }
}

Venue クラスの作成アクション:

    //
    // GET: /Venue/Create

    public ActionResult Create()
    {
        ViewBag.venueTypes = new SelectList(context.VenueTypes, "Id", "Type");
        return View();
    } 

    //
    // POST: /Venue/Create

    [HttpPost]
    public ActionResult Create(Venue venue)
    {
        venue.VenueType = context.VenueTypes.Find(venue.VenueType.Id);

        ViewBag.venueTypes = new SelectList(context.VenueTypes, "Id", "Type");

        if (ModelState.IsValid)
        {
            context.Venues.Add(venue);
            context.SaveChanges();
            return RedirectToAction("Index");  
        }
        return View(venue);
    }

そしてビューの作成:

@model eBouncer_Web.Models.Venue

@* This partial view defines form fields that will appear when creating and editing entities *@
<div class="editor-label">
    @Html.LabelFor(model => model.VenueType)
</div>
<div class="editor-field">
    @Html.DropDownListFor(model => model.VenueType.Id, (SelectList) ViewBag.venueTypes)
</div>

<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>
4

1 に答える 1

1

独自の検証を作成する場合は、必要ありませんModelState

 [HttpPost]
    public ActionResult Create(Venue venue)
    {
        venue.VenueType = context.VenueTypes.Find(venue.VenueType.Id);

        ViewBag.venueTypes = new SelectList(context.VenueTypes, "Id", "Type");

        if (Venue != null && Venue.Name != null)//etc.. or other validations get here...
        {
            context.Venues.Add(venue);
            context.SaveChanges();
            return RedirectToAction("Index");  
        }
        return View(venue);
    }
于 2013-07-29T15:59:26.887 に答える