12

剣道UIアップロードコントロールを使用しています。私は剣道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

ここに、他の有効な回答と一緒に自分の回答を追加します。まず、完全な関数ではなく、success関数で返された応答を取得する必要があります。

        $("#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エントリは次のデータを返します。

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 に答える