今天在開發上遇到一個問題,我想把傳入到PartialView的Model繫結到Controller,但卻繫結不到值,CODE如下
Model
Public Class ArtistViewModel
{
public Label Label{get; set;}
public Artist Artist{get; set;}
}
Public Class Artist
{
public int Id {get; set;}
public string Name{get; set;}
}
View
把Model.Artist傳到PartialView,Artist資料都在ArtistForm這個PartialView裡面填
@model ArtistViewModel
@using (Html.BeginForm())
{
@Html.Partial("ArtistForm",Model.Artist)
*//其他省略*
<input type="submit" value="送出" />
}
PartialView如下
@model Artist
@Html.TextBoxFor(model=>model.Name)
Controller
但實際上這樣Controller並繫不到值,mode值為Null
public ActionResult Create(ArtistViewModel model)
{
return View();
}
原因就是在PartialView下的TextBox產生的Name值為<input type="text" name="Name" />
除非將整個ArtistViewModel傳到PartialView裡面
@model ArtistViewModel
@Html.TextBoxFor(model=>model.Artist.Name)
不過這樣就忘了當初設計Partial View的本意了
不過還好解決這個問題很簡單,只要用EditorTemplate取代PartialView就好,CODE如下
@model ArtistViewModel
@using (Html.BeginForm())
{
@Html.EditorFor(model=>model.Artist)
*//其他省略*
<input type="submit" value="送出" />
}