2

我有一个 ASP.NET MVC Razor 应用程序。在这个应用程序中,我有一个 MultiSelect 控件(基本上是一个下拉菜单,您可以从中选择多个项目)。我已经订阅了这个控件的“关闭”事件,所以当它关闭时,它会将一串逗号分隔的整数传递给控制器​​。但是,尽管调用了控制器中的方法,但传入的值始终为 null。我已经测试了该事件,并且我知道该字符串正在正确生成。这是事件处理程序中的代码:

    `function close() {
        var alertTypeIds = $("#alertMultiSelect").val().toString();
        //alert("this is the alertTypeId: " + alertTypeIds);
        $.post('@Url.Action("SubscribeToAlerts")', { value: alertTypeIds }, function (result) {
            alert("the value was successfully sent to the server");
        });
    };`

这是控制器代码:

`public void SubscribeToAlerts(string alertTypeIds)
    {
        bool isSubscribedToNewItem = false;
        bool isSubscribedToNewCustomer = false;
        bool isSubscribedToNewSupplier = false;

        if (alertTypeIds.Contains('1')){
            isSubscribedToNewItem = true;
        }
        if (alertTypeIds.Contains('2')) {
            isSubscribedToNewCustomer = true;
        }
        if (alertTypeIds.Contains('3')) {
            isSubscribedToNewSupplier = true;
        }

        var subscriptionRepository = new BMTool.Persistance.SubscriptionRepository();
        var userRepository = new BMTool.Persistance.UserRepository();

        IList<BMTool.Models.User> user = userRepository.GetUser("anorkin@daymon.com");
        int associateId = user[0].AssociateId;

        subscriptionRepository.UpdateSubscriptionForUser(associateId, isSubscribedToNewItem, isSubscribedToNewCustomer, isSubscribedToNewSupplier,
            isSubscribedToBmTerminated, isSubscribedToBmChange, isSubscribedToItemCategoryChange);
    }`

现在我知道字符串 alertTypeIds 正在处理程序中正确生成。我也知道控制器方法正在被击中。但是,传递给控制器​​的值 (alertTypeIds) 始终为空。我还想指出,我知道这是草率的代码。我只是想确保在完成编写我可能不得不丢弃的代码的工作之前我没有传入空值。

4

1 回答 1

3

它必须是这个;注意新的数据名称:

 $.post('@Url.Action("SubscribeToAlerts")', { alertTypeIds: alertTypeIds }, 
     function (result) {
            alert("the value was successfully sent to the server");
     });

该字段的名称需要与控制器中的名称匹配,因此您必须使用alertTypeIds。

于 2013-05-02T17:57:07.367 回答