首页 > 解决方案 > 将字符串从 ajax 发送到控制器,结果为 null

问题描述

I have a dropdown that iterates over an enum list, when chosen it sends the enum as a string.(as 'this')

然后我获取该对象的值以获取字符串值。

这是它的样子,

选择下拉菜单:

<select id="userServicesDropDownAuth" class="browser-default custom-select" 
  asp-for="Service" onchange="validateUserAuth(this, '@username', '@password')">
    @{
        <option style="display:none"></option>
        foreach (var item in services)
        {
            <option>@item.ToString()</option>
        }
    }
</select>

ajax 调用:

var service = service.value;
$.ajax({
    url: '/Actions/CheckServiceValidation',
    method: 'POST',
    data: service ,
    dataType: 'text',
    contentType :'text',
    success: function (data) {

最后是控制器方法:

[HttpPost]
public bool CheckServiceValidation(string service)
{
  
    var session = SessionManager.GetSession(service);
    if (session== service)
        return true;
    else return false;
}

在控制器方法中收到的字符串为空,当我将它从字符串更改为服务对象(枚举)时,它总是返回第一个索引。

枚举类:

public enum Service : int
{
    Badoo = 0,
    Tinder = 1,
    Grinder = 2,
    OkCupid = 3
}

我究竟做错了什么?

编辑:

接收服务的ajax事件 在此处输入图像描述

即使我从下拉列表中选择索引 3,传递给控制器​​的服务也始终为 0。

标签: ajaxasp.net-mvc

解决方案


在我看来,它总是返回下拉列表的第一项。您添加具有值的第一个选项:

<option style="display:none"></option>

您需要将 var 设置为使用下拉列表中的选定选项。就像是:

var service = Service.options[Service.selectedIndex].text;

推荐阅读