我无法从用于视图的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方法中使用一个列表...如果有人可以提供帮助。
答案 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>
希望这很有帮助