我遇到一个问题,我的表单提交URL没有一个查询字符串,该查询字符串指向“隐藏代码”中的处理程序。结果是我收到了400(错误请求)错误。
请求网址如下所示:
@GetMapping("/jobs/{job}")
public ResponseEntity<String> importVideos(@PathVariable String job) {
if (job.equalsIgnoreCase("createThumbnails")) {
executeJob(createThumbnails);
} else if (job.equalsIgnoreCase("importVideo")) {
executeJob(importVideo);
}
return new ResponseEntity<>("running", HttpStatus.OK);
}
private void executeJob(Job job) {
Set<JobExecution> runningJobExecutions = jobExplorer.findRunningJobExecutions(job.getName());
if (runningJobExecutions.isEmpty()) {
try {
jobLauncher.run(job, new JobParameters());
} catch (Exception ex) {
log.error(ex.getMessage());
}
} else {
log.info("executeJob already running, so... NOPE!");
}
}
何时应如下所示:
http://localhost:60900/EventRename
这是.cshtml
http://localhost:60900/EventRename?handler=RenameEvent
这可能是相关的,但我还注意到表单数据缺少'__RequestVerificationToken',默认情况下应将其包含在Razor页面中?
为澄清起见,我不希望在URL中看到来自表单的数据。我希望看到一个处理程序引用,以便“ Razor代码背后”知道提交表单时要运行的方法。请参阅本节:https://docs.microsoft.com/en-us/aspnet/core/razor-pages/#multiple-handlers-per-page
<form asp-page-handler="RenameEvent" method="post">
<div class="form-group">
<label asp-for="RenameDataSource"></label>
@Html.DropDownListFor(x => x.RenameDataSource, Model.DataSources, "-- select data source --")
</div>
<div class="form-group">
<label asp-for="RenameTempEvent"></label>
@Html.DropDownListFor(x => x.RenameTempEvent, Model.RenameTempEvents, "-- select event type --")
</div>
<div class="form-group">
<label asp-for="NewName"></label>
@Html.DropDownListFor(x => x.NewName, Model.EventTypes, "-- select event type --")
</div>
<div class="form-group">
<button type="submit">Start Renaming</button>
</div>
</form>
答案 0 :(得分:-1)
@using (Html.BeginForm(ActionName, ControllerName, new { handler = "value of your handler" }, FormMethod.Post))
现在您可以提交表格,它将为您提供相同的价值。
答案 1 :(得分:-2)
您的表单方法是post尝试使用get,如果您想查看url中的数据字符串。 https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_and_retrieving_form_data