无法在.NET Core MVC中发布POST数据

时间:2018-02-06 22:17:51

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

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

enter image description here

我的控制器代码如下所示:

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

formId param通过罚款并设置为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]添加到控制器参数中,结果导致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>

2 个答案:

答案 0 :(得分:2)

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

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

没有看到与实际视图上的表单相关联的其余代码,如果你没有做AJAX帖子(内容类型没有为application / json设置),那么[FromBody]将永远不会工作。

下一个问题是实际期望名为formId的变量使用的路线,还是使用默认的id

答案 1 :(得分:0)

尝试以这种格式提交表单数据:

filters.fromDate: ..
filters.toDate: ...

而不是

fromDate: ...
toDate: ...