asp.net-mvc – 模型绑定不起作用

我有以下POCO课程:

public class Location
    {
        public int LocationId { get; set; }
        public string Name { get; set; }
        public string Street { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string ZipCode { get; set; }
        public string Country { get; set; }
        public float? Latitude { get; set; }
        public float? Longitude { get; set; }
        public string PhoneNumber { get; set; }
        public string EmailAddress { get; set; }
        public string Website { get; set; }
        public virtual ICollection<Program> Programs { get; set; }
        public virtual ICollection<PlayerType> PlayerTypes { get; set; }
    }

public class PlayerType
    {
        public int PlayerTypeId { get; set; }
        public string Name { get; set; }
        public int SortOrder { get; set; }
        public bool IsActive { get; set; }
        public virtual ICollection<Location> Locations { get; set; }
    }

和视图模型类

public class LocationViewModel
    {
        public Location Location { get; set; }
        public IList<PlayerType> SelectPlayerTypes { get; set; } 

        public LocationViewModel()
        {
            Location = new Location();
        }

    }

在我的创建表单中,我已将模型定义为

@model Locator.Models.LocationViewModel

并有以下字段:

div class="editor-label">
    @Html.LabelFor(model => model.Location.Name)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Location.Name)
    @Html.ValidationMessageFor(model => model.Location.Name)
</div>

在我的控制器中处理我的POST

[HttpPost]
        public ActionResult Create(LocationViewModel location)
        {
            if (ModelState.IsValid) {
                locationRepository.InsertOrUpdate(location.Location);
                locationRepository.Save();
                return RedirectToAction("Index");
            }
            location.SelectPlayerTypes = golferTypeRepository.All.Where(p => p.IsActive).ToList();
            return View(location);
        }

问题是我有一个Location对象,但没有任何属性设置为在表单中输入的值.

我在这里做错了吗?

谢谢

这是问题所在:

[HttpPost]
public ActionResult Create(LocationViewModel location)

你看到了吗?它是您的动作参数的名称:位置.

现在看一下你的视图模型,它有一个名为Location的属性:

public Location Location { get; set; }

这会混淆模型绑定器.它不再知道您是否需要绑定LocationViewModel或其属性.

所以只需重命名以避免冲突:

[HttpPost]
public ActionResult Create(LocationViewModel model)
相关文章
相关标签/搜索