Use Ajax and JsonResult in ASP.NET MVC 3

前端 未结 3 1987
野趣味
野趣味 2020-12-29 16:33

I need to get string array or list with ajax and Action, this is my Implementation:

This is my html Dom of view of Index action in AccessMenuController:



        
3条回答
  •  没有蜡笔的小新
    2020-12-29 17:24

    Remove this setting:

    contentType: 'application/json; charset=utf-8',
    

    You are not sending any JSON to the server.

    If you want to keep this setting then make sure that you are sending a valid JSON to your server:

    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
    });
    

    should work (at least it does for me) with the following action:

    [HttpPost]
    public ActionResult RoleDropDownChanged(Guid roleId) 
    {
        var actions = Enumerable.Range(1, 10).Select(x => x.ToString()).ToList();
        return Json(actions);
    }
    

    UPDATE:

    According to your comments it looks like you are trying to use server side helpers in a separate javascript which is not possible. Here's what I would suggest you. Start by providing the url when generating your dropdown:

    @Html.DropDownListFor( x => x.RoleDropDown, Model.Roles, "-- Select role --", new { data_url = Url.Action("RoleDropDownChanged") } )

    and then in your separate javascript file:

    $(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');
                }
            });        
        });    
    });
    

    and then of course you could replace the hardcoded roleId with the currently selected value:

    data: { 'roleId': $(this).val() }
    

提交回复
热议问题