2013-03-15 45 views
3

我要救的java紙條變種中asp.net的MVC臨時數據,但它給語法錯誤如何對一個JavaScript值賦給一個TempData的

$(".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' 
       }); 
      } 

     }); 
+2

你不能這樣做...... – 2013-03-15 08:35:07

+1

Js運行在客戶端,asp.net在服務器端,不再有問題嗎?你爲什麼需要它? – Sergio 2013-03-15 08:35:13

+0

您需要做的是向端點發出ajax請求,以保存javascript中的變量。 – gdp 2013-03-15 09:01:29

回答

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); 
} 

您也可以執行阿賈克斯後而非get和檢查形式的令牌更安全,像建議here

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

相關問題