其實我沒有那麼喜歡寫程式

【ASP.NET MVC】Partial View繫結複雜的Mdel遇到的問題

今天在開發上遇到一個問題,我想把傳入到PartialView的Model繫結到Controller,但卻繫結不到值,CODE如下

Model

ArtistViewModel.cs
Public Class ArtistViewModel
{
    public Label Label{get; set;}
    public Artist Artist{get; set;}
}
Artist.cs
Public Class Artist
{
    public int Id {get; set;}
    public string Name{get; set;}
}

View

把Model.Artist傳到PartialView,Artist資料都在ArtistForm這個PartialView裡面填

Create.cshtml
@model ArtistViewModel
@using (Html.BeginForm())
{
    @Html.Partial("ArtistForm",Model.Artist)
    *//其他省略*
    <input type="submit" value="送出" />
}

PartialView如下

ArtistForm.cshtml
@model Artist
@Html.TextBoxFor(model=>model.Name)

Controller

但實際上這樣Controller並繫不到值,mode值為Null

ArtistController.cs
public ActionResult Create(ArtistViewModel model)
{
    return View();
}

原因就是在PartialView下的TextBox產生的Name值為<input type="text" name="Name" />
除非將整個ArtistViewModel傳到PartialView裡面

ArtistForm.cshtml
@model ArtistViewModel
@Html.TextBoxFor(model=>model.Artist.Name)

不過這樣就忘了當初設計Partial View的本意了

不過還好解決這個問題很簡單,只要用EditorTemplate取代PartialView就好,CODE如下

Create.cshtml
@model ArtistViewModel
@using (Html.BeginForm())
{
    @Html.EditorFor(model=>model.Artist)
    *//其他省略*
    <input type="submit" value="送出" />
}