Asp.net mvc 如何在ASP.NET内核中将修改后的模型传递回控制器
我有以下型号:Asp.net mvc 如何在ASP.NET内核中将修改后的模型传递回控制器,asp.net-mvc,asp.net-core,razor,Asp.net Mvc,Asp.net Core,Razor,我有以下型号: public class Card { [DataType(DataType.Date)] [BindProperty] public DateTime Day { get; set; } [BindProperty] public string Field { get; set; } } 以下控制器: // GET: Card public async Task<IActionResult> Index(D
public class Card
{
[DataType(DataType.Date)]
[BindProperty]
public DateTime Day { get; set; }
[BindProperty]
public string Field { get; set; }
}
以下控制器:
// GET: Card
public async Task<IActionResult> Index(DateTime? day)
{
return View(model);
}
public async Task<IActionResult> Refresh(DateTime? Day, string Field)
{
return RedirectToAction("Index", Day);
}
//获取:卡
公共异步任务索引(日期时间?天)
{
返回视图(模型);
}
公共异步任务刷新(日期时间?天,字符串字段)
{
返回重定向到操作(“索引”,天);
}
以下观点:
@model Card
<h1>Cards</h1>
<div class="text-center">
<label asp-for="Day" class="control-label"></label>
<input asp-for="Day" class="form-control" />
</div>
<div class="text-center">
<label asp-for="Field" class="control-label"></label>
<select asp-for="Field" class="form-control" asp-items="ViewBag.Fields"></select>
</div>
<form asp-action="Refresh">
@Html.HiddenFor(x => x.Day)
@Html.HiddenFor(y => y.Field)
<input type="submit" value="Refresh" class="btn btn-default" />
</form>
@模型卡
卡
@Html.HiddenFor(x=>x.Day)
@Html.HiddenFor(y=>y.Field)
无论我做了什么更改,我总是返回初始的Day
值和null
,因为字段
,就像模型
从未更改过一样
那么,我如何将修改后的模型发回我的控制器呢?您的表单正在提交隐藏字段中的值,这些字段在视图首次加载时呈现在页面上,然后从未修改过(这就是为什么您看到的是
日
和字段
的默认初始化)。您的可编辑字段位于表单之外,是您正在编辑的字段,但它们永远不会提交到服务器。我认为这里给你的主要收获是表单只知道它们内部存在的输入(除非你编写一些javascript魔术来处理这个问题,但在这种情况下没有理由这么做)
您需要删除隐藏字段并将可编辑字段放入表单中,如下所示:
@model Card
<h1>Cards</h1>
<form method="post" asp-action="Refresh">
<div class="text-center">
<label asp-for="Day" class="control-label"></label>
<input asp-for="Day" class="form-control" />
</div>
<div class="text-center">
<label asp-for="Field" class="control-label"></label>
<select asp-for="Field" class="form-control" asp-items="ViewBag.Fields"></select>
</div>
<input type="submit" value="Refresh" class="btn btn-default" />
</form>
@模型卡
卡
您还可以将控制器操作更改为:
[HttpPost]
public async Task<IActionResult> Refresh(Card card)
{
return RedirectToAction("Index", card.Day);
}
[HttpPost]
公共异步任务刷新(卡)
{
返回重定向操作(“索引”,卡片日期);
}
是的,你是对的……我知道这应该是显而易见的:)