.net mvc 4 application - 从ajax调用到控制器中的函数

时间:2016-01-29 08:02:57

标签: javascript jquery ajax asp.net-mvc asp.net-mvc-4

我正在创建mvc 4应用程序,我使用ajax从js文件中调用控制器中的函数。

当我从ajax调用该函数时,它正确地调用相应的函数。但是成功和错误功能都没有解雇。有人可以帮我解决我的错误吗?

我想从数据库中读取数据,将其转换为json格式并将其写入.js文件,然后将成功函数触发。帮我解决这个问题。提前谢谢。

这是我的代码。

  $.ajax({
        //url: '@Url.Action("getJsonData","Home")',
        url: "Home/getJsonHugeData1",
        //data: "{}",
        type: "GET",
        //contentType: 'application/json',
        //dataType: "json",
        success: function () {
            alert();
            alert('success getJsonHugeData');
            loaddata(data);
        },
        error:function(){
            alert('error');
        }
    });

控制器:

public JsonResult getJsonHugeData()
    {
        var users = GetUsersHugeData();
        string json = "var dataSource=";
        json += JsonConvert.SerializeObject(users.ToArray());
        System.IO.File.WriteAllText(Server.MapPath("/Scripts/NewData.js"), json);
        return Json(users, JsonRequestBehavior.AllowGet);


    }


 private List<UserModel> GetUsersHugeData()
    {
        var usersList = new List<UserModel>();
        UserModel user;

        List<dummyData> data = new List<dummyData>();

        using (Database1Entities dataEntity = new Database1Entities())
        {
            data = dataEntity.dummyDatas.ToList();
        }

        for (int i = 0; i < data.Count; i++)
        {
            user = new UserModel
            {
                ID = data[i].Id,
                ProductName = data[i].ProductName,
                Revenue = data[i].Revenue,
                InYear = data[i].InYear.Year
            };
            usersList.Add(user);
        }
     }

2 个答案:

答案 0 :(得分:0)

我相信你的浏览器会阻止通过ajax下载的文件,这是因为JavaScript无法与磁盘进行交互。如果你想让这个工作,你将不得不使用表格发布。

@using (Html.BeginForm("Action", "Controller", FormMethod.Post, new { id = "DownloadForm" }))
{
    ... form data would be here if you had any...
    <button type="submit">Download</button>
}

然后,您将返回一个FileStreamResult,其中包含要下载的文件的内容。

public ActionResult Action(FormModel model)
{
    // Do work to get data for file and then return your file result to the browser.
    return new FileStreamResult(new MemoryStream(fileData), "text/csv") // set the document type that is valid for your file
    {
        FileDownloadName = "users.csv"
    };
}

答案 1 :(得分:0)

我运行了除了以下代码之外的所有代码,因为你没有在你的问题中提供UserModel和dummydata类:

setAlarm

最终结果是你的ajax'url'参数中有一个拼写错误。此外,如果要检查错误,请将功能设置为

private List<UserModel> GetUsersHugeData()
{
    var usersList = new List<UserModel>();
    UserModel user;

    List<dummyData> data = new List<dummyData>();

    using (Database1Entities dataEntity = new Database1Entities())
    {
        data = dataEntity.dummyDatas.ToList();
    }

    for (int i = 0; i < data.Count; i++)
    {
        user = new UserModel
        {
            ID = data[i].Id,
            ProductName = data[i].ProductName,
            Revenue = data[i].Revenue,
            InYear = data[i].InYear.Year
        };
        usersList.Add(user);
    }
 }

检查抛出的错误。