2

問題があります。フォームが送信された後に同じページにメッセージを表示しようとしていますが、送信ボタンをクリックすると、コントローラーのアクションが 2 回呼び出されるため、結果は常に false になります。私のアクションは呼び出され、データは正しい情報でアクションに渡され、データベースに保存されます.2回目はすべてのパラメータがnullであるため、falseが返されます.

一度だけ送信し、リダイレクトせずに同じページに適切な Json 結果を返す方法が必要です。誰かがこれを手伝ってくれることを願っています。ここに私のコードがあります:

私は試した:

function PdfHeaderAndFooterManager() {
 $('#submitPdf').ajaxSubmit(function (e) {
        $.ajax({
            url: "/Dashboard/PdfHeaderAndFooterManager",
            dataType: "json",
            type:"POST",
            data: {headerImage: headerImage, footerImage: footerImage},
            success: function (data) {
                if (data.success) {
                    alert(data.message);
                    $('#resultMessage').text(data.message).css("color", "RED");
                }
                else {
                    alert(data.message);
                    $('#resultMessage').text(data.message).css("color", "RED");
                }
            }

        });
       e.preventDefault();
    });
}

簡単にするためにいくつかのコードを削除した私の見解

@using (Html.BeginForm("PdfHeaderAndFooterManager", "Dashboard", FormMethod.Post, new { enctype = "multipart/form-data", id = "formPdfImages" }))
 div id="resultMessage"></div>
}

public ActionResult PdfHeaderAndFooterManager(HttpPostedFileBase headerImage, HttpPostedFileBase footerImage)
    {

       //some code to declare variables


        if (headerImage != null)
        {
            if (!String.IsNullOrEmpty(headerImage.ContentType))
            {
                headerImageContentType = imageHelper.IsValidImageType(headerImage.ContentType);

                if (headerImageContentType)
                {
                    resizedHeaderImage = imageHelper.ResizeImage(headerImage.InputStream);
                }
                else
                {
                    return Json(new { success = false, message = "Please Upload an image* file less than 2GB." });
                }
            }
        }
        if (footerImage != null)
        {
            if (!String.IsNullOrEmpty(footerImage.ContentType))
            {
                footerImageContentType = imageHelper.IsValidImageType(footerImage.ContentType);
                if (footerImageContentType)
                {   
                    resizedFooterImage = imageHelper.ResizeImage(footerImage.InputStream);
                }
                else
                {

                    return Json(new { success = false, message = "Please Upload an image* file less than 2GB." });
                }
            }
        }
        if (P24DataPrincipal.CurrentIdentity != null)
        {
            if (resizedHeaderImage != null || resizedFooterImage != null)
            {
              //add to DB code
                return Json(new { success = true, message = "Image(s) Uploaded Successfully." });

            }
            else
            {
                return Json(new {success = false, message = "Upload atleast 1 image file." });

            }

        }

        return Json("someview");

    }

上記は私のアクションであり、最も重要な部分は「return」キーワードです。結果が false の場合だけでなく、結果が true の場合でも、このアクションを一度だけ呼び出してリダイレクトしないようにする必要があります。ありがとう。

4

3 に答える 3

0

最初の関数は実際にはほぼ正しいように見えます。いくつかの小さな調整は、以下のようになります。

次は機能しますか?

$(function() {
    $('#formPdfImages').submit(function(event) {
        event.preventDefault();
        event.stopPropagation();

        $.post("@(Url.Action("PdfHeaderAndFooterManager", "Dashboard"))", $(this).serialize(), function(data) {
            if (data.success) {
                $("#resultMessage").text(data.success);
            } else {
                $("resultMessage").text(data.success);
            }

        });
    });
});
于 2012-05-24T20:36:53.963 に答える
0

あなたが使用していて、これでsubmit@using (Html.BeginForm())を使用してAjax呼び出しを行うことはできません。

ajax 呼び出しの場合は、次を使用する必要があります: @using (Ajax.BeginForm()),

ただし、画像をアップロードする必要があるため、次を使用する必要があります。

@using (Html.BeginForm("PdfHeaderAndFooterManager", "Dashboard", FormMethod.Post, new { enctype = "multipart/form-data", id = "formPdfImages" }))

したがって、Ajax 呼び出しはできません。同じページにメッセージを表示するには、次のような別の方法を使用してください。

public ActionResult PdfHeaderAndFooterManager(HttpPostedFileBase headerImage, HttpPostedFileBase footerImage)
    {

   //some code to declare variables


    if (headerImage != null)
    {
        if (!String.IsNullOrEmpty(headerImage.ContentType))
        {
            headerImageContentType = imageHelper.IsValidImageType(headerImage.ContentType);

            if (headerImageContentType)
            {
                resizedHeaderImage = imageHelper.ResizeImage(headerImage.InputStream);
            }
            else
            {
                ViewBag.ReturnMessage="<span style='color:red'> Please Upload an image* file less than 2GB.</span>";
                return View();
            }
        }
    }
    if (footerImage != null)
    {
        if (!String.IsNullOrEmpty(footerImage.ContentType))
        {
            footerImageContentType = imageHelper.IsValidImageType(footerImage.ContentType);
            if (footerImageContentType)
            {   
                resizedFooterImage = imageHelper.ResizeImage(footerImage.InputStream);
            }
            else
            {
                ViewBag.ReturnMessage="<span style='color:red'>Please Upload an image* file less than 2GB.</span>";
                return View();
            }
        }
    }
    if (P24DataPrincipal.CurrentIdentity != null)
    {
        if (resizedHeaderImage != null || resizedFooterImage != null)
        {
          //add to DB code
                ViewBag.ReturnMessage="<span style='color:green'>Image(s) Uploaded Successfully.</span>";
                return View();
        }
        else
        {
            ViewBag.ReturnMessage="<span style='color:red'>Upload atleast 1 image file.</span>";
            return View();
        }

    }

ビューで:

@using (Html.BeginForm("PdfHeaderAndFooterManager", "Dashboard", FormMethod.Post, new { enctype = "multipart/form-data", id = "formPdfImages" })){
 <div id="resultMessage">
    @ViewBag.ReturnMessage
</div>
    }
于 2013-04-03T06:21:24.043 に答える
0

あなたは持ってい<input type="submit" />ますか?その場合は、それをボタンに変更しready、関数にヒットするようにjQuery に接続します。

$.ready(function(){
    $("#submitButtonId").click(function() {
        //put your ajax stuff here
    });
});
于 2012-05-24T20:33:14.287 に答える