删除此设置:
contentType: 'application/json; charset=utf-8',
您没有向服务器发送任何 JSON。
如果您想保留此设置,请确保向服务器发送有效的 JSON:
data: JSON.stringify({ 'roleId': '61AD3FD9-C080-4BB1-8012-2A25309B0AAF' })
So:
$.ajax({
url: '@Url.Action("RoleDropDownChanged")',
type: 'POST',
data: { 'roleId': '61AD3FD9-C080-4BB1-8012-2A25309B0AAF' },
success: SuccessRoleChangeHandler,
error: OnFailRoleChangeHandler
});
应该通过以下操作起作用(至少对我有用):
[HttpPost]
public ActionResult RoleDropDownChanged(Guid roleId)
{
var actions = Enumerable.Range(1, 10).Select(x => x.ToString()).ToList();
return Json(actions);
}
UPDATE:
根据您的评论,您似乎正在尝试在单独的 javascript 中使用服务器端助手,这是不可能的。这就是我给你的建议。首先在生成下拉列表时提供 url:
<div class="RoleAccess">
@Html.DropDownListFor(
x => x.RoleDropDown,
Model.Roles,
"-- Select role --",
new {
data_url = Url.Action("RoleDropDownChanged")
}
)
</div>
然后在单独的 javascript 文件中:
$(document).ready(function() {
$('div.RoleAccess select').change(function () {
var url = $(this).data('url');
$.ajax({
url: url,
type: 'POST',
data: { 'roleId': '61AD3FD9-C080-4BB1-8012-2A25309B0AAF' },
success: function(result) {
alert('success');
},
error: function() {
alert('error');
}
});
});
});
当然,您可以将硬编码的 roleId 替换为当前选择的值:
data: { 'roleId': $(this).val() }