我正在尝试通过提交表单使用.NET CORE MVC发出POST请求。从视图中成功进行了调用,如下所示:
我的控制器代码如下所示:
[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 article和this 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>
答案 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: ...