我是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方法中只有一个参数,因此应该没问题.
推荐阅读
如何解决《Javascript语法-if语句》经验,为你挑选了1个好方法。 ... [详细] 如何解决《使用estimatedItemSize删除项目时,UICollectionView单元格会调整大小》经验,为你挑选了0个好方法。 ... [详细] 如何解决《只有在运行单元测试时才能运行自定义gradle任务》经验,为你挑选了0个好方法。 ... [详细] 如何解决《无法打开输入文件:app/console(Symfony2)》经验,为你挑选了1个好方法。 ... [详细] 如何解决《使用多个列表作为函数的输入参数(Python)》经验,为你挑选了1个好方法。 ... [详细] 如何解决《当.ts文件存在时从项目中排除js.map文件》经验,为你挑选了1个好方法。 ... [详细] 如何解决《在C++11中,未排序的修改警告将成为未使用结果的警告》经验,为你挑选了1个好方法。 ... [详细] 如何解决《使用iOS中的Javascript复制到剪贴板》经验,为你挑选了5个好方法。 ... [详细] 如何解决《使用AngularJS的某种俄罗斯玩偶容器的动态编辑表单》经验,为你挑选了0个好方法。 ... [详细] 如何解决《如何创建文本文件并在vbscript中写入它》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何在整个页面上显示ui-router状态?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《无法在Azure中访问我的X509Certificate2的PrivateKey》经验,为你挑选了1个好方法。 ... [详细] 如何解决《清洁解决方案"将"ObservableList<Foo>"强制转换为List<IFoo>?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《在向后传递中调试nans》经验,为你挑选了1个好方法。 ... [详细] 如何解决《具有元组条件的QueryDSL和SubQuery》经验,为你挑选了0个好方法。 ... [详细] 如何解决《来自pythonworker的错误:/bin/python:没有名为pyspark的模块》经验,为你挑选了1个好方法。 ... [详细] 如何解决《为什么在std::shared_ptr实现中需要两个指向托管对象的原始指针?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《ArrayList与HashSet中的removeAll()》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何在Xamarin.Forms中的AndroidWebView上启用本地存储》经验,为你挑选了1个好方法。 ... [详细] 如何解决《启用节点加密后,Cassandra节点无法看到对方》经验,为你挑选了0个好方法。 ... [详细]吐了个 "CAO" !Tags | 热门标签RankList | 热门文章
- 1如何从Postgres数据库中删除用户
- 2格式字符串错误的参数太多
- 3检查数组中的所有值是否以字符串开头
- 4在Bootstrap表单上甚至触及表单之前,AngularJS ng-messages显示错误
- 5Python 3.3.5浮点格式精度
- 6如何解决此构建问题 - 无法分配给属性:'date'是一个get get属性
- 7从Azure API管理调用时X-ARR-ClientCert标头中没有证书
- 8Apache Flink中的全局排序
- 9绘制分类热图保持(x,y)值颜色
- 10在javascript中获取对象而不是数组
- 11括号内有多行
- 12Java Regex双反斜杠转义特殊字符
- 13通过api查询npmjs注册表
- 14如何通过GCDWebServer在iOS上播放本地M3u8文件
- 15如果汇编存在,则为C#条件编译
- 16如何评论区域内的所有行
- 17防止onmouseout触发子元素
- 18gem install git-up不再在El Capitan工作
- 19我如何使用或设置sonar-project.properties文件
- 20ScriptedSandbox64.exe已停止工作 - Visual Studio 2015
DevBox开发工具箱 | 专业的在线开发工具网站 京公网安备 11010802040832号 | 京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有