我有一个ASP.NET MVC Razor应用程序。在这个应用程序中,我有一个MultiSelect控件(基本上是一个下拉列表,您可以从中选择多个项目)。我已经订阅了此控件的“close”事件,因此当它关闭时,它会将一串逗号分隔的整数传递给控制器。但是,尽管正在调用控制器中的方法,但传入的值始终为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)始终为null。我还要注意,我知道这是邋code的代码。我只是想确保在我完成编写代码的工作之前我没有传入null,我可能不得不扔掉。
答案 0 :(得分:3)
它必须是这样的;注意新的数据名称:
$.post('@Url.Action("SubscribeToAlerts")', { alertTypeIds: alertTypeIds },
function (result) {
alert("the value was successfully sent to the server");
});
字段名称需要与控制器中的名称匹配,因此您必须使用alertTypeIds。