c# - 无法在 .NET Core MVC 中发布数据

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

我正在尝试通过提交表单使用 .NET CORE MVC 发出 POST 请求。调用已从 View 成功进行,如下所示:

enter image description here

我的 Controller 代码如下所示:

[HttpPost("fred-responses-report-result/{formId:int?}")]
public async Task<IActionResult> FredResponsesReportResult(int? formId, ReportFilters filters)

formId 参数通过fine传递并设置为63,但报告过滤器对象(如下)只是null。如果重要的话,该类如下:

public class ReportFilters
{
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime FromDate { get; set; }

    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime ToDate { get; set; }
}

到目前为止我已阅读this articlethis post 。我尝试从模型中删除属性 - 没有帮助。我尝试将 [FromBody][FromForm] 添加到 Controller 参数中,结果出现 415 http 错误。

此时我对如何让它发挥作用有点不知所措。如果我查看“查看源代码”(在屏幕截图中),似乎这些只是作为 HTML 编码的字符串而不是 JSON 传递,尽管我不明白为什么。无论如何,这里正确的方法是什么?

编辑,这是进行调用的代码:

            <form action="" method="post">
            <div class="row gray-background">
                <!--Date Filter-->
                <div class="col-12">
                    <div class="row">
                        <div class="col-2 offset-1 bold-font">
                            <p>Submitted Date</p>
                        </div>
                        <div class="col-3">

                            <div class="date datepicker fromDate">
                                <label for="fromDate">From</label>
                                <div class="input-group">
                                    <input id="fromDate" name="fromDate" type="text" class="form-control" value="1">
                                    <span class="input-group-addon">
                                        <i class="fa fa-calendar fa-lg"></i>
                                    </span>
                                </div>
                            </div>

                        </div>
                        <div class="col-3">
                            <div class="date datepicker toDate">
                                <label for="toDate">To</label>
                                <div class="input-group">
                                    <input id="toDate" name="toDate" type="text" class="form-control" value="@Model.ReportFilters.ToDate">
                                    <span class="input-group-addon">
                                        <i class="fa fa-calendar fa-lg"></i>
                                    </span>
                                </div>
                            </div>
                        </div>
                    </div>

                    <!--Update Filters Button-->
                    <div class="row">
                        <div class="col-12 d-flex justify-content-center">
                            <button class="btn button-margin btn-primary"
                                    type="submit">
                                Update Filter
                            </button>
                        </div>
                    </div>

                </div>
            </div>
        </form>

最佳答案

[HttpPost("fred-responses-report-result/{formId:int?}")]
public async Task<IActionResult> FredResponsesReportResult(int? formId,[Bind("ToDate","FromDate")]ReportFilters filters)
 {

这应该有效。由于您使用的是直接模型(我相信)这个实例,绑定(bind)将允许您仅定位您想要从表单返回的字段..

在实际 View 中看不到与表单关联的其余代码,并且如果您没有执行 AJAX 帖子(未为 application/json 设置内容类型),则 [FromBody] 将从来不工作。

下一个问题是实际使用的路由需要一个名为 formId 的变量,还是使用默认的 id

关于c# - 无法在 .NET Core MVC 中发布数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48652896/

相关文章:

c# - 如何使用C#将日期时间格式转换为 Crystal 报表中的日期格式?

没有 proto 文件的 C# gRPC 服务

android - 发布到 Facebook 墙时出错

javascript - Kendo UI 网格未定义十进制

ios - 如何使用 Alamofire 发送带有 gzip 内容的 HTTP POST 请求?

c# - 使用 NUnit 测试无限序列,但只需检查有限序列

c# - Net Core 2.1 通用主机即服务

asp.net - 在 ASP.NET Core Identity(独立)中,如何实现 2FA?

c# - BlurEffect 在应用效果之前有很长的延迟

c# - 我应该如何在我的 ViewModel 中加载一个具有子集合属性的实体?