12

我正在使用 Kendo UI 上传控件。我已经这样定义了 Kendo UI 上传:

<input type="file" name="resume" />
$("#file").kendoUpload({
    async: {
         saveUrl: "/Home/SaveResume",             
         autoUpload: true
         },            
         complete: function (e)
         {
            // here i want to get the text that is returned from the controller
         }
});

控制器代码如下:

public ActionResult SaveResume(HttpPostedFileBase resume)
{
    var text;
    // code for the file to convert to text and assign it to text
    return Json(text, JsonRequestBehavior.AllowGet);
}

返回代码后,我想检索完整函数中的代码。我怎样才能做到这一点?

4

3 回答 3

15

您可以像这样获得对成功功能的响应

function onSuccess(e)
{
    var response = e.response.data();
}

返回 json 可能在哪里

return Json(new { data = text }, "text/plain");
于 2013-03-21T05:38:51.573 回答
10

如果你只是传回一个字符串,你应该能够做到:

function onSuccess(e) {
    var text = e.XMLHttpRequest.responseText;
}

如果需要,您还可以传回更复杂的对象:

// Object
public class MyObject
{
    public int ID { get; set; }
    public string Text { get; set; }
}

// Controller Action
public virtual ActionResult Upload(HttpPostedFileBase file)
{
    return this.Json(new MyObject(), "text/plain");
}

// Javascript Handler
function onSuccess(e) {
    var response = jQuery.parseJSON(e.XMLHttpRequest.responseText);
    var id = response.ID;
    var text = response.Text;
}
于 2013-03-20T09:52:52.173 回答
1

我将在此处将我的答案与其他有效答案一起添加。首先,尽管您希望在成功函数而不是完整函数中获得返回的响应:

        $("#files").kendoUpload({
        async: {
            saveUrl: url,
            removeUrl: removeUrl,
            autoUpload: true
        },
        select: onFileSelect,       // function for when a file is selected
        success: onFileSuccess,     // function that returns response after upload
        complete: onFileComplete,   // function after success
        remove: onFileRemove,       // function for when a file is removed
        });

on success 函数返回一个对象(通常人们将其命名为 e)

function onFileSuccess(e) {

    console.log("e.response", e.response);
    console.log("e.operation", e.operation);
    console.log("e.XMLHttpRequest.status", e.XMLHttpRequest.status);

    //e.operation is upload or remove
    if (e.operation === "upload") {
        // a file was added, get the response
        var fileid = e.response;
    } else {
        // Do something after a file was removed
    }
}

我的 console.log 条目返回此数据:

控制台日志值

这就是我从服务器返回数据的方式:

    public HttpResponseMessage InsertTempFile()
    {
        HttpPostedFile file = System.Web.HttpContext.Current.Request.Files[0];

        //........
        // Code that adds my file to the database
        // and generates a new primary key for my file
        //.........

        var response = new HttpResponseMessage(HttpStatusCode.OK);
        response.Content = new StringContent(myNewId.ToString());

        return response;
    }

response.Content 在 e.response 中返回我的新 ID HttpStatusCode.Ok 返回我的状态 200。如果您检查响应,还会返回一堆其他数据。

请注意,要使用 HttpResponseMessage 和 HttpStatuseCode,您需要在类中包含以下命名空间:

using System.Net.Http;
using System.Net;
于 2016-03-31T02:40:12.857 回答