微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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)

原文地址:https://www.jb51.cc/aspnet/248092.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐