0

私はjavascriptで画像を作成し、それをjavascriptのimg要素に割り当てています。MVC3のActionButtonクリックでその画像をコントローラに渡す方法は?

Javascript

var picture = jqplotToImg($('#ChartContent')); //method to change chart as picture, no needed here
var img = document.getElementById("img1");
img.src = picture;

意見

@using (Html.BeginForm())
{
  <img id="img1" name="img1" />
 @Html.ActionButton("Export","ExportData","Report")
}

コントローラ

public void ExportReport(FormCollection fc)
{
}
4

2 に答える 2

1

これを使用するHTML5 File APIと、画像をサーバーに非同期でアップロードできます。

また、画像をBase64文字列に変換する別exampleの方法もあります。この文字列は、たとえばAJAXなどの手段を使用してサーバーに送信できます。

于 2012-11-01T10:47:35.793 に答える
1

base64 文字列を要求し、それをコピーしてテストに使用したため、失敗しました。これにはajaxメソッドを使用しましたが、機能します

    function ExportData() {
    var picture = jqplotToImg($('#ChartContent'));
    //prompt("", picture);

    $.ajax({ type: 'POST',
        url: '../Report/Base64ToImage',
        async: false,
        data: { source: picture },
        success: function (data) {
            //alert(data);
        }
    });
    window.location.href = "../Report/ExportChart";
}

[HttpPost]
    public void Base64ToImage(string source)
    {
        string base64 = source.Substring(source.IndexOf(',') + 1);
        base64 = base64.Trim('\0');
        byte[] data = Convert.FromBase64String(base64);
        string path = System.Configuration.ConfigurationManager.AppSettings["UploadFolder"].ToString();

        var file = Server.MapPath(path + "Chart.jpg");
        System.IO.File.WriteAllBytes(file, data);
    }
于 2012-11-02T04:02:54.947 に答える