控制器中的“发布”上的“模型列表”属性为NULL

时间:2019-10-29 18:50:15

标签: c# asp.net-mvc

因此,我已经在一个干净的项目上测试了我遇到的问题,并完成了以下代码设置,以检查自定义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中,返回错误:“已经添加了具有相同键的项。”

那我在做什么错了?

2 个答案:

答案 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()可以工作,但这不是项目所需要的。