2017-12-13 16 views
0

このオブジェクトを失うことなくアプリケーションの周りに移動する必要があります。最初は静的なクラスを使っていましたが、これは簡単で、速く、効果的でした。しかし、静的オブジェクトにはどこからでも誰でもアクセスできるということが私の注目を集めています。だから、それは深刻なセキュリティリスクなので、私は別の方法でそれを見つけようとしています。私は、コードの背後で(この場合、ホテルの新しい部屋を予約することになる)実行する必要があることを行うためのアヤックスのリクエストを行いました。すべての良い。私は別の部屋を予約する必要があるときにそれを提示するために、クライアントサイド、モデル、または何かにそれを戻したいと思います。現在、「ブック」ボタンをクリックして部屋を追加しますが、クライアント側に戻るとすぐにオブジェクトが失われます。そこで、私はそれをサーバー側でシリアル化し、サーバー側に返しました。しかし、私は剃刀のコードでそれにアクセスすることはできません。剃刀でjavascriptからオブジェクトにアクセス

これが実行できるかどうかはわかりません(少なくともこの方法では)。しかし、多くのウェブサイトでは、例えば、販売をしてページを切り替え、すべての情報を保持しなければならないので、別の方法が必要です。可能であれば、私はこれを行うために常にデータベースに行く必要はありません。私はこれを覚えておきたい。だから、

は、コード表示する:

<button type="reset" class="btn btn-info center-block" onclick='BookRoom(
     @Html.Raw(Json.Serialize(Model)),             
     "@Repository.RoomTypeList[i].UUID", 
     "@Repository.RoomTypeList[i].PossibleRateTypes[j].UUID", 
     "checkIn", 
     "checkOut");'> 
     Book 
</button> 

<script type="text/javascript"> 
    function AjaxRooms(URL, method, contentType, request, dataType, successRespMsg, successRespObj) { 
     $.ajax({ 
      url: URL, 
      method: method, 
      contentType: contentType, 
      data: JSON.stringify(request), 
      dataType: dataType, 
      success: function (resp) { 
       debugger 
       alert(resp[successRespMsg]); 
       var aux = JSON.parse(resp[successRespObj]); 

       // Here is where I want to access the object from javascript to razor, in order to keep it in memory 

      }, 
      error: function (error) { 
       alert(error); 
      } 
     }) 
    } 

function BookRoom(model, roomUUID, rateUUID, checkIn, checkOut) { 
    AjaxRooms('Home/Book?ro=' + roomUUID + '&ra=' + rateUUID + '&ci=' + document.getElementById(checkIn).value + '&co=' + document.getElementById(checkOut).value, 
      'post', 'application/ json', model, 'json', 'msg', 'obj');  
} 
</script> 



public class Reservation 
{ 
    public DateTime CheckIn { get; set; } 
    public DateTime CheckOut { get; set; } 

    public List<RoomType> BookedRooms { get; set; } = new List<RoomType>(); 
} 

    public IActionResult Book([FromBody]Reservation reservation) 
    { 
     var roomUUID = HttpContext.Request.Query["ro"].ToString(); 
     var rateUUID = HttpContext.Request.Query["ra"].ToString(); 
     var checkIn = HttpContext.Request.Query["ci"].ToString(); 
     var checkOut = HttpContext.Request.Query["co"].ToString(); 

     try 
     { 
      if (checkIn == "" || checkOut == "") 
       return Json(new { msg = "You have to select a Check In and a Check Out date.", obj = JsonConvert.SerializeObject(reservation) }); 
      else if (roomUUID != "" || rateUUID != "") 
      { 
       // Adds a new room (with the specified rate) to the list 
       var roomType = Repository.DeepClone(Repository.RoomTypeList) 
        .FirstOrDefault(r => r.UUID == roomUUID); 

       roomType.PossibleRateTypes = new List<RateType>() { roomType.PossibleRateTypes.FirstOrDefault(rt => rt.UUID == rateUUID) }; 

       reservation.BookedRooms.Add(roomType); 
       reservation.CheckIn = Convert.ToDateTime(checkIn); 
       reservation.CheckOut = Convert.ToDateTime(checkOut); 

       return Json(new { msg = "Added to cart.", obj = JsonConvert.SerializeObject(reservation) }); 
      } 
      else 
       return Json(new { msg = "We couldn't add it to cart. Please try again.", obj = JsonConvert.SerializeObject(reservation) }); 

     } 
     catch (Exception ex) 
     { 
      return Json(new { msg = "An error has occurred. Please try again later or contact and administrator.", obj = JsonConvert.SerializeObject(reservation) }); 
     } 
    } 

私はこのようにそれをやってきたのが、あなたはそれを行うには、別の、より良い方法を提案することができます。私はすべての耳です。

+1

ブラウザでローカル/セッションストレージを使用することを検討しましたか?これは、ユーザーがサイトのページ間を移動したときにデータをメモリに保持する1つの方法です。 – Daryl

+0

オブジェクトとしてモデルにアクセスする代わりにjsonを保存しますか?うーん...うまくいくかもしれない。プロセスは私がやっているものと同じだろうか?サーバー側で処理を行い、jsonを返すようにAjaxに要求します。次に、私があなたを正しく理解すれば、それをストレージに保存できます。それがうまくいくと思いますか? – taiko

+0

小メモ:ローカルストレージは、すべてのブラウザでサポートされていません。ブラウザ間の完全なサポートが必要な場合は、サーバーサイドセッションの状態とポストを使用してajax経由で取得する必要があります。 – CalC

答えて

1

ブラウザでlocal/sessionのストレージを使用したことがありますか?これは、ユーザーがサイトのページ間を移動したときにデータをメモリに保持する1つの方法です。

+0

私が前に言ったように、チップのおかげで。これは、重要ではない情報を保持し、ページ間を移動するときにデータが失われる心配がない、すてきで清潔な方法です。 :) – taiko

関連する問題