0

質問があります。Kendo UI for ASP.NET MVC を使用して、Web アプリケーションのアップロード機能を作成しています。うまく機能しますが、問題は、[アップロード] ボタンをクリックして送信フォームを実行し、他のページに移動した後、ユーザーが以前にアップロードしたファイルを確認できないことです。この場合、アップローダを作成ビューに配置し、ファイルをサーバーにアップロードした後、そのファイルへのリンクをデータベースのモデルのフィールドに保存しますが、常に null 値を取得します。ここで誰かが私にそれを行うための提案をしてもらえますか. どうもありがとう。これが私が使用するコードです。* コントローラー:

[HttpPost]
public ActionResult Create(Model model)
{
if(ModelState.IsValid)
{
   model.Url = Url;
   Db.Models.Add(model);
   Db.SaveChanges();
   return RedirectToAction("Index");
}
return View(model);
}

public ActionResult Save(IEnumerable<HttpPostedFileBase> attachments)
        {
            // The Name of the Upload component is "attachments"
            foreach (var file in attachments)
            {
                // Some browsers send file names with full path. We only care about the file name.
                var fileName = Path.GetFileName(file.FileName);
                var destinationPath = Path.Combine(Server.MapPath("~/Contents/files/"), fileName);

                DestinationPath = destinationPath;

                file.SaveAs(destinationPath);
            }

            // Return an empty string to signify success
            return Content("");
        }

意見

@using (Html.BeginForm()) {



  @Html.ValidationSummary(true)
    <div class="editor-label">
            Upload file
        </div>
        <div style="width:45%">
            @Html.Kendo().Upload().Name("attachments").Async(async => async.Save("Save", "Model").AutoUpload(true)).Multiple(false)
        </div>
    <p>
            <input type="submit" value="Create" class="k-button" />
        </p>

モデル

public string Url {get;set;}
4

2 に答える 2

5

クライアント側のコード:

@(Html.Kendo().Upload()
        .Name("uploadTagImage")
        .Multiple(false)
        .Async(async => async.Save("ApiUploadImage", "Tag").SaveField("files").AutoUpload(true))
        .Events(events =>
                    {
                        events.Success("PV_Upload_TagImage_OnSuccess");
                    })
)  

<script type="text/javascript">
    // Events
    PV_Upload_TagImage_OnSuccess = function (result) {
        var data = result.response.Data;

        if(data.length > 0) {
            $("#tag-image").attr('src', data[0]);
        }

        $.publish("PV_Grid_Access_OnAddNewRecord_Event");
    };
</script>

サーバー側のコード:

public ActionResult ApiUploadImage([DataSourceRequest] DataSourceRequest request, IEnumerable<HttpPostedFileBase> files)
{
    var savedFilePaths = new List<string>();
    var applicationPath = System.Web.HttpContext.Current.Request.Url.Scheme + "://" + System.Web.HttpContext.Current.Request.Url.Authority + System.Web.HttpContext.Current.Request.ApplicationPath + "/Content/Images/Others/";
    if(files != null)
    {
        foreach(var file in files)
        {
            var fileName = Path.GetFileName(file.FileName);                    
            if(fileName !=null)
            {
                fileName = DateTime.Now.ToString("yyyyMMddmm-") + fileName;
                var imagePath = Path.Combine(Server.MapPath("~/Content/Images/Others/"), fileName);
                file.SaveAs(imagePath);
                savedFilePaths.Add(applicationPath + fileName);
            }
        }
    }

    return Json(new[] {savedFilePaths}.ToDataSourceResult(request));
}
于 2013-09-07T10:04:22.400 に答える
1

空の文字列を返す必要はありません。必要な任意の文字列値を返すことができます。

これを行うには、応答のコンテンツ タイプを「text/plain」に設定する必要があります。

Response.ContentType = "text/plain";
于 2013-04-16T22:04:33.583 に答える