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);
}
相關文章
相關標籤/搜索