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。 string2IDdate1IDdate2ID

的情况相同

只需检查您是否在控制器方法的模型参数中收到任何值

编辑 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