Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何在ASP.NET内核中将修改后的模型传递回控制器_Asp.net Mvc_Asp.net Core_Razor - Fatal编程技术网

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]
公共异步任务刷新(卡)
{
返回重定向操作(“索引”,卡片日期);
}

是的,你是对的……我知道这应该是显而易见的:)