Razor 中 ViewModel 的模型名称

Model names from ViewModel in Razor

我有以下视图模型:

public class ProfileViewModel
{
    public BandProfileModel BandProfile { get; set; }
    public MusicanProfileModel MusicianProfile { get; set; }
    public RegularProfileModel RegularProfile { get; set; }
}

我在我的视图中使用此 ViewModel Post 表单:

 @using (Ajax.BeginForm("RegisterBand", "NewProfile", new AjaxOptions() { HttpMethod = "Post",
            InsertionMode = InsertionMode.Replace
        }))
        {
            @Html.AntiForgeryToken()
            @Html.ValidationSummary(true, "", new { @class = "text-danger" })


            <div class="form-horizontal">
                <div class="form-group">
                    <div class="col-md-10">
                        Bandname
                    </div>
                    <div class="col-md-10">
                        @Html.EditorFor(x => x.BandProfile.Name, new { htmlAttributes = new { @class = "form-control" } })
                        @Html.ValidationMessageFor(x => x.BandProfile.Name, "", new { @class = "text-danger" })
                    </div>
                </div>

这是我的 RegisterBand 型号:

  public ActionResult RegisterBand(BandProfileModel model)
        {

            if (ModelState.IsValid == false)
            {
                return Json(JsonRequestBehavior.AllowGet);
            }


            return View("Index");
        }

我遇到的问题是输入字段的名称属性是 BandProfile.Name、BandProfile.Genre,而不仅仅是流派和名称。

我该如何解决这个问题?

您可以将 RegisterBand ActionResult 更改为接受 ProfileViewModel

public ActionResult RegisterBand(ProfileViewModel model)
{
    if (ModelState.IsValid == false)
    {
        return Json(JsonRequestBehavior.AllowGet);
    }

    return View("Index");
}

您的 HttpPost 需要接受您传递到表单中的同一对象的实例,否则它将不知道要绑定到什么名称。

如果你想改变控件的名称和id,你可以这样做

 @Html.EditorFor(x => x.BandProfile.Name, new { htmlAttributes = new { @class = "form-control", @id="Genre",@Name="Genre"  } })