如何使用DisplayFor

时间:2018-08-03 14:58:53

标签: c# post asp.net-core-mvc

我无法从用于视图的post方法获取控制器中的值,我也不知道为什么。我看到了很多论坛,我认为我做的是对的,但这似乎不是正确的方法,因为我无法获取价值。

首先,我只使用DisplayFor,但是它只是显示而不传递值,然后我加入HiddenFor,就像在其他论坛中看到的那样使用它。但是模型始终返回零值。

AtribuiçãoController:

public IActionResult Create(List<Main> main)
{
    return RedirectToAction(nameof(Index));
}

Index.cshtml:

@model ModelsLibrary.Main
<form asp-action="Create">
<table class="table">
    <thead>
        <tr>
            <th>
                <label>Disciplina</label>
            </th>
            <th>
                <label>Turno</label>
            </th>
            <th>
                <label>Tipologia</label>
            </th>
            <th>
                <label>Docente</label>
            </th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.Turno)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.MetaDisciplina.Nome)
                    @Html.HiddenFor(modelItem => item.MetaDisciplina.Nome)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.LetraTurno)
                    @Html.HiddenFor(modelItem => item.LetraTurno)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Tipologia.Tipo)
                    @Html.HiddenFor(modelItem => item.Tipologia.Tipo)
                </td>
                <td>
                    <select asp-for="Docente" asp-items="ViewBag.Docente"></select>
                </td>
            </tr>
        }
    </tbody>
</table>
<div class="form-group">
    <input type="submit" value="Create" class="btn btn-default" />
</div>
</form>

索引方法

 [HttpGet]
    public IActionResult Index()
    {
        var Turno = new List<Turno>();

        Main main = new Main();
        main.Turno = Turno;

        ViewData["Ano"] = new SelectList(_context.AnoLetivo, "Ano", "Ano");
        return View(main);
    }

您好,将值绑定到控制器时遇到问题。 create方法应该在属性中获取值,但是我不知道为什么,天堂也不知道为什么值不通过...我没有将列表传递给视图,但是我想要在create方法中使用一个列表...如果有人可以提供帮助。

1 个答案:

答案 0 :(得分:2)

您的问题出在您的控制器中。您的create方法确实重定向到了Index方法,但没有通过List main

我认为您的代码应如下所示:

humanFuture

您要重定向数据的方式称为POST-REDIRECT-GET模式。如果您需要更多信息,请访问以下网站:https://andrewlock.net/post-redirect-get-using-tempdata-in-asp-net-core/

--------------------编辑--------------------

在将数据从View传递到Controller时遇到绑定问题。您可以在视图中使用TempData将完整的模型传递给控制器​​:

    [HttpGet]
    public ActionResult Index()
    {
        List<Main> main = (List<Main>)TempData["yourData"];
        if (main == null)
        {
            main = new List<Main>();
        }
        return View("Index", main);
    }
    public IActionResult Create(List<Main> main)
    {
        TempData["yourData"] = main;
        return RedirectToAction(nameof(Index));
    }

在此示例中,我使用jquery脚本创建TempData并将其发送到控制器

@model  List<WebApplication1.Models.TestObject>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

@foreach (var item in Model)
{
    @Html.DisplayFor(m => item.ToDisplay)
}


<form action="/Home/Create" method="post">
    <button type="submit">Submit</button>
</form>

<script>
    $('form').submit(function() {
    @{ TempData["FullModel"] = Model; }
    });
</script>

希望这很有帮助