我是MVC5和C#的新手,我正在努力实现一些我不完全理解的东西.
我有一个像这样的团队模型:
public class Team { [Key] public Guid ID { get; set; } public string TeamName { get; set; } public string Coach { get; set; } public string Conference { get; set; } }
我也有像这样的玩家模型:
public class Player { [Key] public Guid Id { get; set; } [ForeignKey("Teams")] public Guid TeamId { get; set; } public string Name { get; set; } public virtual Team Teams { get; set; } }
查看模型是
public class TeamViewModel { public string TeamName { get; set; } public string Coach { get; set; } public string Conference { get; set; } public ListPlayers { get; set; } }
通过这种结构,您可以为每个团队添加无限数量的玩家.因此,我有一个具有少量属性的Teams表和一个包含玩家名称以及玩家TeamId的Player表,以便我们知道他们属于哪个团队.
当我创建团队时,我的问题出现了.我有这样的Create Controller:
[HttpPost] [ValidateAntiForgeryToken] public async TaskCreate(TeamViewModel model) { if (ModelState.IsValid) { var team = new Team { TeamName = model.TeamName, Coach = model.Coach, Conference = model.Conference, Player = model.Player }; db.Teams.Add(team); var result = await db.SaveChangesAsync(); return RedirectToAction("Index"); } return View(); }
我的观点如下:
@model SoccerTeams.Models.ViewModels.TeamViewModel @{ ViewBag.Title = "Create"; }Create
@using (Html.BeginForm()) { @Html.AntiForgeryToken()Team
@Html.ValidationSummary(true, "", new { @class = "text-danger" })@Html.LabelFor(model => model.TeamName, htmlAttributes: new { @class = "control-label col-md-2" })@Html.EditorFor(model => model.TeamName, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.TeamName, "", new { @class = "text-danger" })@Html.LabelFor(model => model.Coach, htmlAttributes: new { @class = "control-label col-md-2" })@Html.EditorFor(model => model.Coach, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Coach, "", new { @class = "text-danger" })@Html.LabelFor(model => model.Conference, htmlAttributes: new { @class = "control-label col-md-2" })@if (@Model != null) { foreach (var p in Model.Player) {@Html.EditorFor(model => model.Conference, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Conference, "", new { @class = "text-danger" })@Html.Raw("")@Html.Raw("} } else {@Html.Raw("")}@Html.Raw("}@Html.ActionLink("Back to List", "Index")@section Scripts { @Scripts.Render("~/bundles/jqueryval") }根据我的理解,View假设能够将input元素转换为列表并将其传递给我的ViewModel.但是,我的ViewModel始终为null.
我错过了什么,我将如何使这项工作?
PS我明白我可以使用Html.EditorFor,但我无法使其工作,所以我只是将其打印为Html,因为我需要首先解决我的其他问题.
编辑
我已将视图更改为具有以下代码
@Html.Raw("")@Html.Raw("因此,模型现在可以正确填充Players Array,但是所有其他值现在都变为null.如果我删除了输入元素,则会填充值,但是player数组再次为null,因为没有表单字段.你知道什么可能是罪魁祸首吗?
在TeamViewModel中,我还将Player重命名为Players.
1> gyosifov..:为了让MVC将表单数据绑定到Action方法的参数,它们的名称应该匹配.
假设您的ViewModel具有
List
代码属性应该是:Players 在你的情况下:
foreach (var p in Model.Player) {@Html.Raw("")@Html.Raw("}应该:
for (int i = 0; i < Model.Player.Length; i++) {@Html.Raw("")@Html.Raw("}因为这是您提供的参数的名称:
Create(TeamViewModel model)另外要小心,因为索引不应该被破坏,这意味着它们应该是0,1,2 ......等而不会跳过一个数字.
我们在属性中读取的方式是查找parameterName [index] .PropertyName.索引必须从零开始且不间断.
注:你可以阅读更多关于斯科特Hanselman的结合后的集合- 在这里
最后我建议如果你有一个属性列表的属性 - 在你的案例列表中
Player
使用复数形式的属性名称 -Players
.编辑
尝试删除"模型".在名字的前面.使它像这样的"玩家[0] .Name".由于您在Create Action方法中只有一个参数,因此应该没问题.
推荐阅读
如何解决《禁用在VisualStudio2015forASP.NET5项目中自动添加新文件》经验,为你挑选了0个好方法。 ... [详细] 如何解决《Haskell中的语法错误》经验,为你挑选了1个好方法。 ... [详细] 如何解决《启动任务并等待多次》经验,为你挑选了1个好方法。 ... [详细] 如何解决《常数,但仅适用于此范围的其余部分》经验,为你挑选了1个好方法。 ... [详细] 如何解决《投影中的变量"x"在GROUPBY中不存在》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何搜索"到下一行所述的无效地址"错误》经验,为你挑选了0个好方法。 ... [详细] 如何解决《延迟加载html5视频》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何在javafx中制作透明场景和舞台?》经验,为你挑选了2个好方法。 ... [详细] 如何解决《无法从'HTMLInputElement'中读取'selectionStart'属性:》经验,为你挑选了0个好方法。 ... [详细] 如何解决《PHP:将base64转换为图像》经验,为你挑选了1个好方法。 ... [详细] 如何解决《添加clojure依赖项并运行leinuberjar会导致java.lang.IllegalAccessError》经验,为你挑选了0个好方法。 ... [详细] 如何解决《RtuneRF不稳定,如何优化?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《安全规则:检查空身份验证》经验,为你挑选了1个好方法。 ... [详细] 如何解决《运行DSharp示例时出现错误信息》经验,为你挑选了1个好方法。 ... [详细] 如何解决《JS兼容Haxe承诺?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《在C++中重载了==和!=运算符》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何将对象转换为对象数组(或对象集合)》经验,为你挑选了2个好方法。 ... [详细] 如何解决《SWIFT-LocationManager循环多次?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何在IphonePhonegap中播放内联视频》经验,为你挑选了1个好方法。 ... [详细] 如何解决《输入参数'd'在D3.js函数中意味着什么?》经验,为你挑选了1个好方法。 ... [详细]吐了个 "CAO" !Tags | 热门标签RankList | 热门文章
- 1在Intellij 15.02中设置线路断点不起作用
- 2在悬停时更改列表项目项目符号/数字颜色
- 3如何配置pm2以运行hexo?
- 4PL/SQL转换特殊字符
- 5封装和封闭有什么区别?
- 6python - 将字符串与布尔值进行比较
- 7如何更改redshift列编码?
- 8将时间转换为秒字符串问题
- 9使用"npm install"安装jquery-ui
- 10字符串数组上的Java 8流
- 11makefile中%和*之间的区别是什么
- 12如何将参数传递给静态类构造函数?
- 13构造函数java中的final double
- 14Angular2如何获取所有选中的复选框
- 15合并两个列表c ++
- 16如果字段顺序不同,则Struct具有不同的大小
- 17如何从golang中的sql解析*time.Time?
- 18基于方法参数的自动装配
- 19正则表达两位数不相同的两位数字
- 20Asp.Net MVC 6身份3 MongoDB外部登录(Facebook)
DevBox开发工具箱 | 专业的在线开发工具网站 京公网安备 11010802040832号 | 京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有