我正在尝试通过提交表单使用 .NET CORE MVC 发出 POST 请求。调用已从 View 成功进行,如下所示:
我的 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 article和 this 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/