因此,我已经在一个干净的项目上测试了我遇到的问题,并完成了以下代码设置,以检查自定义Class对象是否仍返回List中的null:
查看
<div>
<div class="jumbotron">
<h1 class="display-4"><span class="fas fa-user-secret"></span> Babcock Canada - Application Template</h1>
<br />
<div class="alert alert-primary" role="alert">
<span class="fas fa-info-circle"></span>
<span> This is the Babcock Canada MVC Application template for use in developing content-rich web applications.</span>
</div>
<hr class="my-4" />
</div>
<div>
<div class="container-fluid">
@if (!string.IsNullOrEmpty(Model.errorMessage))
{
<div class="alert alert-danger" role="alert">
<span class="fas fa-stop-circle"></span> @Html.DisplayFor(alert => alert.errorMessage)
</div>
}
@if (!string.IsNullOrEmpty(Model.successMessage))
{
<div class="alert alert-success" role="alert">
<span class="fas fa-check-circle"></span> @Html.DisplayFor(alert => alert.successMessage)
</div>
}
<div>
@using (Html.BeginForm("TestAction", "Default", FormMethod.Post))
{
@Html.HiddenFor(m => Model.tester[0].tester)
<button type="submit" class="btn btn-primary">
Submit 1
</button>
}
</div>
<div>
@using (Html.BeginForm("TestAction", "Default", FormMethod.Post))
{
@Html.HiddenFor(m => Model.tester[1].tester)
<button type="submit" class="btn btn-primary">
Submit 2
</button>
}
</div>
</div>
</div>
TestClass.cs
namespace Test.Models
{
public class TestClass
{
public string tester { get; set; }
}
}
模型
namespace Test.Models
{
/// <summary>
/// This is the default template model.
/// </summary>
public class DefaultModel : SharedModel
{
public string errorMessage = string.Empty;
public string successMessage = string.Empty;
public List<TestClass> tester { get; set; }
public DefaultModel()
{
}
public void Init()
{
tester = new List<TestClass>
{
new TestClass { tester = "Testing..." },
new TestClass { tester = "Testing2..." }
};
}
}
}
CONTROLLER
[HttpPost]
public ActionResult TestAction(DefaultModel model)
{
return View(model);
}
因此,结果是第二个返回列表中的NULL,但第一个返回正确。
在以相同方式循环的列表的其他项目索引0中,返回错误:“已经添加了具有相同键的项。”
那我在做什么错了?
答案 0 :(得分:0)
尝试使用辅助程序 <div>
@using (Html.BeginForm("TestAction", "Default", FormMethod.Post))
{
@Html.Hidden("tester", Model.tester[0].tester)
<button type="submit" class="btn btn-primary">
Submit 1
</button>
}
</div>
<div>
@using (Html.BeginForm("TestAction", "Default", FormMethod.Post))
{
@Html.Hidden("tester", Model.tester[1].tester)
<button type="submit" class="btn btn-primary">
Submit 2
</button>
}
</div>
edit
答案 1 :(得分:0)
事实证明,当表单位于循环内部,必须位于外部并且必须通过提交按钮(包含名称“ ID”和该列表项的值)引用ID值时,此方法不起作用。
假设使用Html.Hidden()
可以工作,但这不是项目所需要的。