是否可以使用 Ajax 表单提交传递路由值?
is it possible to pass route value using Ajax form submit?
问题:如何使用 Ajax 将路由值连同表单传递给控制器?
我通常使用这样的 Ajax 提交表单
function AjaxFormSubmit(frm) {
var form = `#${frm}`;
$(form).submit(function (e) {
e.preventDefault();
var actionUrl = $(form).attr('action');
$.ajax({
type: "POST",
url: actionUrl,
processData: false,
contentType: false,
data: $(form).serialize(),
success: function (data) {
alert(data);
}
});
});
}
用法:
<button onclick="AjaxFormSubmit('formName')" class="btn btn-primary">Create</button>
表格本身
<form id="formName" asp-action="Create" asp-route-id="somedata">
.... some fields
然后我成功提交了表单但是我从来没有得到路由值asp-route-id
我是这样在C#控制器端接收的
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(TheModel modelName, [FromQuery]string id)
{
......
return Json(id);
}
或...[FromRoute]string id
none 个正在工作
我得到一个值为 null 的空白页面!!
最后,如何使用 Ajax 将路由值连同表单传递给控制器?
基本上,如果我们想使用表单向我们的服务器提交数据,我们会像这样编写您的代码,但不会集成 ajax,在我的代码片段中,我添加了 2 个按钮,一个是使用表单数据提交,另一个使用ajax发送数据:
@model TestFormModel
<div class="row">
<div class="col-md-4">
<form method="post" id="formName" asp-action="CreateAction" asp-route-id="somedata">
<div class="form-group">
<label asp-for="prop1" class="control-label"></label>
<input asp-for="prop1" class="form-control" />
</div>
<div class="form-group">
<label asp-for="prop2" class="control-label"></label>
<input asp-for="prop2" class="form-control" />
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
<button onclick="AjaxFormSubmit('formName')" class="btn btn-primary">CreateByAjax</button>
</div>
</div>
<script>
function AjaxFormSubmit(frm) {
var form = `#${frm}`;
console.log($(form).serialize());
$.ajax({
type: "POST",
url: "https://localhost:44385/home/CreateAction",
data: {
prop1:$("#prop1").val(),
prop2:$("#prop2").val(),
id:"somedata"
},
success: function (data) {
alert(data);
}
});
}
</script>
添加控制台日志,我们可以看到表单中没有id
属性。
问题:如何使用 Ajax 将路由值连同表单传递给控制器?
我通常使用这样的 Ajax 提交表单
function AjaxFormSubmit(frm) {
var form = `#${frm}`;
$(form).submit(function (e) {
e.preventDefault();
var actionUrl = $(form).attr('action');
$.ajax({
type: "POST",
url: actionUrl,
processData: false,
contentType: false,
data: $(form).serialize(),
success: function (data) {
alert(data);
}
});
});
}
用法:
<button onclick="AjaxFormSubmit('formName')" class="btn btn-primary">Create</button>
表格本身
<form id="formName" asp-action="Create" asp-route-id="somedata">
.... some fields
然后我成功提交了表单但是我从来没有得到路由值asp-route-id
我是这样在C#控制器端接收的
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(TheModel modelName, [FromQuery]string id)
{
......
return Json(id);
}
或...[FromRoute]string id
none 个正在工作
我得到一个值为 null 的空白页面!!
最后,如何使用 Ajax 将路由值连同表单传递给控制器?
基本上,如果我们想使用表单向我们的服务器提交数据,我们会像这样编写您的代码,但不会集成 ajax,在我的代码片段中,我添加了 2 个按钮,一个是使用表单数据提交,另一个使用ajax发送数据:
@model TestFormModel
<div class="row">
<div class="col-md-4">
<form method="post" id="formName" asp-action="CreateAction" asp-route-id="somedata">
<div class="form-group">
<label asp-for="prop1" class="control-label"></label>
<input asp-for="prop1" class="form-control" />
</div>
<div class="form-group">
<label asp-for="prop2" class="control-label"></label>
<input asp-for="prop2" class="form-control" />
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
<button onclick="AjaxFormSubmit('formName')" class="btn btn-primary">CreateByAjax</button>
</div>
</div>
<script>
function AjaxFormSubmit(frm) {
var form = `#${frm}`;
console.log($(form).serialize());
$.ajax({
type: "POST",
url: "https://localhost:44385/home/CreateAction",
data: {
prop1:$("#prop1").val(),
prop2:$("#prop2").val(),
id:"somedata"
},
success: function (data) {
alert(data);
}
});
}
</script>
添加控制台日志,我们可以看到表单中没有id
属性。