Razor 视图使用 ajax 发送下拉值
Razor view send dropdown value with ajax
我想发送下拉列表的值
@Html.DropDownListFor(model => model.selection, Model.liste_selection, new {@id="Selection", @class = "form-control" })
用这个ajaxpost
<script>
$('#valider').on("click",function () {
$.ajax({
url: '@Url.Action("Executer", "Requete")',
type: "POST",
data: { id: $('#Selection').val() },
success: function (result) {
$('#ajaxDisplay').html(result);
}
});
});
但是我的下拉列表的值到达控制器时变为空
这是我的控制器
[HttpPost]
public ActionResult Executer(RequeteOptimise ro, string Command)
{
Session["dateDebutReq"] = ro.begin.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
Session["dateFinReq"] = ro.end.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
if (ro.selection.Contains("Tous"))
{
var viewModel = new RequeteOptimise
{
nombre = rr.callReqCount(ro)
};
return PartialView("../utilities/Nombre", viewModel);
}
尝试对您的 ajax 进行如下更改
$('#valider').on("click",function () {
var info={
id:$('#Selection option:selected').text();
};
$.ajax({
url: '@Url.Action("Executer", "Requete")',
type: "POST",
data: JSON.stringify(info),
success: function (result) {
$('#ajaxDisplay').html(result);
}
});
});
如果遇到任何问题,请告诉我?
EDIT - 假设您的模型包含 2 个字符串和 2 个 dateTime 字段,我将按如下方式编辑 Jsondata:
$('#valider').on("click",function () {
var date1=$('#date1ID').val();
var date2=$('#date2ID').val();
var model={
string1: $('#string1ID').val(),
string2: $('#string2ID').val(),
date1: new Date(date1),
date2: new Date(date2)
};
$.ajax({
url: '@Url.Action("Executer", "Requete")',
type: "POST",
data: JSON.stringify(model),
success: function (result) {
$('#ajaxDisplay').html(result);
}
});
});
编辑: $('#string1ID').val()
- 这里 string1ID
是您从中获取值的任何控件的 ID。 string2ID
、date1ID
和 date2ID
的情况相同
只需检查您是否在控制器方法的模型参数中收到任何值
编辑 2- 好吧,如果你想一个一个地传递模型值,那么上面所说的方法肯定会起作用,但如果你想将整个表单传递给控制器通过Ajax可以修改如下:
$('#valider').on("click",function (e) {
e.preventDefault();
var form=$("#formID");
$.ajax({
url: '@Url.Action("Executer", "Requete")',
type: "POST",
data: form.serialize(),
success: function (result) {
$('#ajaxDisplay').html(result);
}
});
});
有关序列化表单的更多详细信息,我建议您阅读 this link
我想发送下拉列表的值
@Html.DropDownListFor(model => model.selection, Model.liste_selection, new {@id="Selection", @class = "form-control" })
用这个ajaxpost
<script>
$('#valider').on("click",function () {
$.ajax({
url: '@Url.Action("Executer", "Requete")',
type: "POST",
data: { id: $('#Selection').val() },
success: function (result) {
$('#ajaxDisplay').html(result);
}
});
});
但是我的下拉列表的值到达控制器时变为空
这是我的控制器
[HttpPost]
public ActionResult Executer(RequeteOptimise ro, string Command)
{
Session["dateDebutReq"] = ro.begin.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
Session["dateFinReq"] = ro.end.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
if (ro.selection.Contains("Tous"))
{
var viewModel = new RequeteOptimise
{
nombre = rr.callReqCount(ro)
};
return PartialView("../utilities/Nombre", viewModel);
}
尝试对您的 ajax 进行如下更改
$('#valider').on("click",function () {
var info={
id:$('#Selection option:selected').text();
};
$.ajax({
url: '@Url.Action("Executer", "Requete")',
type: "POST",
data: JSON.stringify(info),
success: function (result) {
$('#ajaxDisplay').html(result);
}
});
});
如果遇到任何问题,请告诉我?
EDIT - 假设您的模型包含 2 个字符串和 2 个 dateTime 字段,我将按如下方式编辑 Jsondata:
$('#valider').on("click",function () {
var date1=$('#date1ID').val();
var date2=$('#date2ID').val();
var model={
string1: $('#string1ID').val(),
string2: $('#string2ID').val(),
date1: new Date(date1),
date2: new Date(date2)
};
$.ajax({
url: '@Url.Action("Executer", "Requete")',
type: "POST",
data: JSON.stringify(model),
success: function (result) {
$('#ajaxDisplay').html(result);
}
});
});
编辑: $('#string1ID').val()
- 这里 string1ID
是您从中获取值的任何控件的 ID。 string2ID
、date1ID
和 date2ID
只需检查您是否在控制器方法的模型参数中收到任何值
编辑 2- 好吧,如果你想一个一个地传递模型值,那么上面所说的方法肯定会起作用,但如果你想将整个表单传递给控制器通过Ajax可以修改如下:
$('#valider').on("click",function (e) {
e.preventDefault();
var form=$("#formID");
$.ajax({
url: '@Url.Action("Executer", "Requete")',
type: "POST",
data: form.serialize(),
success: function (result) {
$('#ajaxDisplay').html(result);
}
});
});
有关序列化表单的更多详细信息,我建议您阅读 this link