3

java scrip var を asp.net mvc Temp-data に保存したいのですが、構文エラーが発生しています

$(".PopReviewNo").click(function () {
            if (($('textarea').val().length == 0)) {
                $('.comm').addClass("layout");
            }
            else {
                $(".comm").removeClass("layout");
                var comment = $("#comme").val();
                **@TempData["CommentForPop"]= $("#comme").val();** ///Check this one 



                $.fancybox({
                    'transitionIn': 'elastic',
                    'transitionOut': 'elastic',
                    'easingIn': 'easeOutBack',
                    'easingOut': 'easeInBack',
                    'width': 850,
                    'height': 394,
                    href: "/Stores/PopReview/@Model.Company.id?comment=" + comment,
                    'type': 'iframe'
                });
            }

        });
4

2 に答える 2

2

別の方法として、データをエンドポイントに送信して保存することもできます。

$(".PopReviewNo").click(function () {
        if (($('textarea').val().length == 0)) {
            $('.comm').addClass("layout");
        }
        else {
            $(".comm").removeClass("layout");
            var comment = $("#comme").val();

            var myVariableToSave = $("#comme").val(); 

            //Send the variable to be saved              
            $.getJSON('@Url.Action("myendpoint")', { dataToSave: myVariableToSave}, function(data) {
                 //show a message if you want
            });

            $.fancybox({
                'transitionIn': 'elastic',
                'transitionOut': 'elastic',
                'easingIn': 'easeOutBack',
                'easingOut': 'easeInBack',
                'width': 850,
                'height': 394,
                href: "/Stores/PopReview/@Model.Company.id?comment=" + comment,
                'type': 'iframe'
            });
        }

    });

TempData はリクエスト間の永続性を目的としているため、リクエストの最後にクリアされることに注意してください。したがって、変数を保存するための他のストレージを探してください。

public ActionResult MyEndPoint(string dataToSave)
{
    if(string.IsNullOrEmpty(dataToSave))
    {
         return Json(new { message = "Empty data to save"}, JsonRequestBehaviour.AllowGet);
    }

    //Save it to session or some other persistent medium
    Session["dataToSave"] = dataToSave;

    return Json(new { message = "Saved"}, JsonRequestBehaviour.AllowGet);
}

ここで提案されているように、セキュリティを強化するために、フォーム トークンの取得とチェックの代わりに ajax 投稿を実行することもできます。

于 2013-03-15T09:08:33.250 に答える
1

gdp の回答を使用してみましたが、「パスに不正な文字」が表示され続けました。代わりに、AJAX を使用するように少し変更しました。

$(".PopReviewNo").click(function () {
    if (($('textarea').val().length == 0)) {
        $('.comm').addClass("layout");
    }
    else {
        $(".comm").removeClass("layout");
        var comment = $("#comme").val();

        var myVariableToSave = $("#comme").val(); 


          $.ajax({
          // alert(myVariableToSave); // Check the value.
          type: 'POST',
          url: '/mycontroller/myendpoint',
          data: "dataToSave=" + myVariableToSave,
          success: function (result) {
        //show a message if you want
            },
         error: function (err, result) {
         alert("Error in assigning dataToSave" + err.responseText);
          }


        $.fancybox({
            'transitionIn': 'elastic',
            'transitionOut': 'elastic',
            'easingIn': 'easeOutBack',
            'easingOut': 'easeInBack',
            'width': 850,
            'height': 394,
            href: "/Stores/PopReview/@Model.Company.id?comment=" + comment,
            'type': 'iframe'
        });
    }

});

そして私の行動:

    public ActionResult myendpoint(string dataToSave)  
    {
        if (string.IsNullOrEmpty(dataToSave))
        {
            return Json(new { message = "Empty data to save" },  JsonRequestBehavior.AllowGet);
        }

        //Save it to session or some other persistent medium
          ...

        //return Json(new { message = "Success" }, JsonRequestBehavior.AllowGet);
    // or
        return new EmptyResult();
    }

私はこれを信用しません。@gdpがなかったら、この方向に考えたことはなかったでしょう

于 2016-07-08T19:51:01.667 に答える