从控制器获取Json值到jquery

时间:2014-05-12 10:43:07

标签: javascript jquery ajax asp.net-mvc

我有一个JS函数:

$(document).on('click', '#submitForm', function (e) {
var fileName = $('#fileName').val();
$.ajax({
    type: 'POST',
    url: '/Calculation/FileExist',
    data: { 'fileName': fileName },
    dataType: 'bool',
    success: function (result) {
        if (result.returnvalue) {
            e.preventDefault();
            alert(result.returnvalue);
            alert("The filename already exists. Please choose another one");
        }
        else {
            alert("The file doesn't exist");
        }
    }
});
});

我的行动:

    public ActionResult FileExist(string fileName)
    {
        bool result = true;
        string path = Server.MapPath(TempPath) + fileName + ".xlsx"; //Path for the file
        string[] Files = Directory.GetFiles(Server.MapPath(TempPath));
        for (int i = 0; i < Files.Length; i++)
        {
            if (path == Files[i])
            {
                //The filename already exists
                result = false;
            }
        }
        return Json(new { returnvalue = result });
    }

我在这里做错了什么?我试图从FileExist方法获取bool值,如果它是真的,则停止提交表单(e.preventDefault)

6 个答案:

答案 0 :(得分:2)

没有dataType: 'bool'。请使用dataType:'json' dataType:'text'发送布尔值

在您的情况下,它应该是dataType:'json'

$.ajax({
    type: 'POST',
    url: '/Calculation/FileExist',
    data: { 'fileName': fileName },
    dataType: 'json',
    success: function (result) {
        if (result.returnvalue) {
            e.preventDefault();
            alert(result.returnvalue);
            alert("The filename already exists. Please choose another one");
        }
        else {
            alert("The file doesn't exist");
        }
    }
});

然后

[HttpPost]
public ActionResult FileExist(string fileName)
{
}

答案 1 :(得分:1)

在控制器方法之上,您必须放置此注释:

[HttpPost]

答案 2 :(得分:1)

首先,在jquery ajax请求中指定dataType: 'json'

$.ajax({
    // <...>
    dataType: 'json'
    // <...>
});

如果您想使用HTTP GET

public ActionResult FileExist(string fileName) 
{
    // <...>
    return Json(model, JsonRequestBehavior.AllowGet);
}

您可以使用HTTP POST方法:

[HttpPost] // Add this attribute.
public ActionResult FileExist(string fileName) 
{ 
    // <...>
    return Json(model);
}

答案 3 :(得分:1)

[HttpPost]添加到控制器,设置dataType:'json'并在jquery ajax中设置async:false为什么需要POST方法。只需使用GET方法并在控制器中添加JsonRequestBehavior.AllowGet

答案 4 :(得分:0)

datatype设为json而不是 bool ,并在您的操作或其他方式添加[HttpPost]属性是type:'GET'

答案 5 :(得分:0)

  

服务呼叫中的可用数据类型为:

     
      
  1. XML
  2.   
  3. HTML
  4.   
  5. 脚本
  6.   
  7. JS​​ON
  8.   
  9. JS​​ONP
  10.   

根据您的代码:

在从服务器返回json时将dataType更改为json。

默认情况下,ActionResult将在您的ajax调用中使用GET,并指定POST

因此请在方法的顶部添加[HttpPost]