如何在分配src =" @ URL.action"时显示特定错误

时间:2018-05-21 13:13:15

标签: jquery asp.net-mvc razor

我有这个事件:

on("error")

我的控制器方法可以在无法加载图像时抛出异常(可能有多种原因,但主要原因是图像不存在),我可以在浏览器控制台中看到它。

重要的是要说图像不存在于任何服务器目录中,并且我不想存储它,我将它从一个Dropbox共享文件夹中检索为一个字节数组。

但我在视图中显示用户友好的消息时遇到问题。 由于我的控制器的响应存储在src中,我无法访问错误信息。

使用事件img.onerrorContent("<script>alert("+errormessage+");</script>")不会提供有关错误的任何信息。

如果我返回 private void button1_Click(object sender, EventArgs e) { //put your string in a textxbox with multiline property set to true string[] s = textBox1.Text.Replace("\r", "").Replace("\n", "").Split(','); string r = ""; for (int i = 0; i < s.Length; i++) { r = r + s[i] + ","; if ((i + 1) % 3 == 0) r = r + "+"; } if (r.Substring(r.Length - 1, 1) == ",") r = r.Substring(0, r.Length - 1); if (r.Substring(r.Length - 1, 1) == "+") r = r.Substring(0, r.Length - 1); string[] finalArrayString = r.Trim().Split('+'); //just for show the result textBox1.Text = ""; for (int i = 0; i < finalArrayString.Length; i++) textBox1.Text = textBox1.Text + finalArrayString[i] + "\r\n"; } ,则不会显示警告。

我想避免多次调用服务器,所以ajax检查错误然后分配src并不适合我。

我还想避免将img转换为base 64,然后将其分配给src,因为img变得更大了。

我在这里要求一个不可能的事情,或者有一种方法可以在我无法想到的视图上显示错误信息?

如果它太令人困惑,请指出它,我会尝试以更好的方式解释自己。感谢。

1 个答案:

答案 0 :(得分:0)

请勿使用图片src来保存@Url.Action() - 这不是必需的,而且是不正确的HTML。

有些$.ajax应该可以达到你想要的效果。如果你愿意,你可以详细说明一个正确的返回模型(例如,完全不依赖于字符串响应),但是这个或更具体的版本应该能够实现你所追求的目标:

<div id="itemImage">
    <img src="/path/to/initial-image.png" />
</div>

<button id="test-button">TEST</button>

<script>
    $("#test-button").on("click", function () {
        onChange("test-product-name");
    });

    function onChange(productName) {
        var url = "@Url.Action("GetCustomProductImage")";
        $.ajax({
            url: url + "?productName=" + productName,
            type: "GET",
            dataType: "json",
            success: function (transport) {
                if (transport !== "false") {
                    $("#itemImage img").attr('src', transport);
                } else {
                    $("#itemImage").text("Could not be retrieved");
                }
            },
            error: function () {
                console.log("ERROR");
            }
        });
    }
</script>

控制器操作:

public JsonResult GetCustomProductImage(string productName)
{
    // Get image src from productSrc - ideally, build a Json return model
    // EITHER:
    var transport = "/Path/To/image.png";
    // OR:
    //var transport = "false";
    return Json(transport, JsonRequestBehavior.AllowGet);
}

根据您更新的问题,您可能会发现this answer非常有用,可以获取对Dropbox托管图像的引用或将文件下载到服务器并引用该文件。