asp.net core mvc (5) Bind数据对象

前面介绍过,页面能够经过提交参数的方式,控制器经过参数方式接收,可是只介绍了基本的string、int类型。若是页面字段较多,实际上能够对应一个类的话,应该如何快速的处理呢?html

https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-mvc-app/controller-methods-views?view=aspnetcore-3.1mvc

咱们看MovieController.cs文件,其中有两个Edit方法,一个是针对http get,另外一个是针对http post。 app

// GET: Movies/Edit/5
public async Task<IActionResult> Edit(int? id)
{
    if (id == null)
    {
        return NotFound();
    }

    var movie = await _context.Movie.FindAsync(id);
    if (movie == null)
    {
        return NotFound();
    }
    return View(movie);
}

以上方法,页面提交了一个id参数,经过id,获取对应的movie对象并显示到页面上。
此时客户页面显示的Edit.cshtml,该页面中是一个form对象,点击按钮会按照http post方式提交给movieController的Edit方法,同时提交多个参数,好比Title、Genere、Price等。
再看控制器的另外一个Edit方法,其中参数部分经过Bind方式,将多个参数映射到一个Movie对象上,这样控制器处理就更方便了。若是不用Bind,则须要逐个把参数写上去,有点繁琐。async

// POST: Movies/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [Bind("ID,Title,ReleaseDate,Genre,Price")] Movie movie)
{
    if (id != movie.ID)
    {
        return NotFound();
    }

    if (ModelState.IsValid)
    {
        try
        {
            _context.Update(movie);
            await _context.SaveChangesAsync();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!MovieExists(movie.ID))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }
        return RedirectToAction("Index");
    }
    return View(movie);
}
相关文章
相关标签/搜索