2016-08-13 19 views
0

初心者の質問には申し訳ありませんが、なぜvarの値をC#プロパティに設定できないのですか? 私はいくつかのモデルプロパティ&計算を行う取得した値を使用する方法を見つけようとしています....MVCビューでC#プロパティを使用しているときに変数が設定されていません

@using System.Collections 
@using System.Runtime.Serialization 
@using CarRentalMVCApp.Models 
@model CarRentalMVCApp.Models.Rentals 


@functions { 
    public string selection { get; set; } 
    public decimal Price { get; set; } 
} 
@{ 
ViewBag.Title = "Create"; 
} 



<script> 

function select() { 
    var $el = $("#selectedCar"); 
    var selected = $("#selectedCar option:selected").text(); 
    $el.on("change", @selection = selected); 
    alert(@selection); 

} 

function Rental() { 

    var choice = select(); 
    @foreach (var car in ViewData["availableCars"] as IEnumerable<Vehicles>) 
    { 
     if (selection != null && int.Parse(selection) == car.מספר_רכב) 
     { 
      Price = car.עלות_ליום_השכרה; 
     } 
    } 
    if (firstDay != null && lastDay != null) { 
     var rentalData = { 
      price: @Price, 
      firstDay: $("#beginRental").val(), 
      lastDay: $("#endRental").val() 
     } 
     alert(rentalData); 
    } 
} 

</script> 

@selectionは常に0と私はそうのような別のveriableでそれを設定しようとするものに等しいです。 :

@selection = selected; 

0のままです。あなたは助けるために時間やリンクを持っている場合、私は、説明をappresiateう@記号が含まれている場合にはjavascriptの変数のいずれかのタイプを使用することはできませんなぜ私はまた、カントが理解

.....

+0

を返しますか? js変数から値を設定していますか? – Shyju

+0

はい...しようとしています... $ el.on( "change"、@selection = selected); –

答えて

0

クライアント側のコードでは、試したとおりにC#の変数値を設定することはできません。カミソリが実行されると、C#コードが実行され(、サーバ)、その結果(文字列)がクライアントに送信され、ページに必要なマークアップがレンダリングされます。ページのソース)。あなたは、サーバーのコードでこれを使用する必要がある場合

だから、あなたはAJAX呼び出しを行うと、サーバー

にそれを送信する必要があり、あなたが選択した項目の値の価格をしたいのであれば、あなたのAJAX呼び出しを行いますサーバーを選択し、選択したオプション値を送信し、それを使用して価格を計算し、それを返します。 GetPriceを想定し

var selected = $("#selectedCar option:selected").text(); 
$.get("@Url.Action("GetPrice","Home")"?id="+selected ,function(res){ 
    alert("Price of selection" + res); 
}); 

は名前idでパラメータを受け入れ、価格、あなたが変数の値を設定している

public ActionResult GetPrice(int id) 
{ 
    // based on this id, Get the corresponding price 
    decimal price = 100.0M; //replace with your value from db 
    return Json(price,JsonRequestBehavior.AllowGet); 
} 
+1

ありがとうございます!!!!! –

+0

この種の構文で複数のパラメータをActionResultに送信する方法を知っていますか?私は@HTMLから日付の値を引き出す必要があります。私が作成したActionResultは、仕事をして、あなたが戻ってきたDateTime値を受け入れているので、値を引っ張るために選択した関数が.text()であるため、空の値をvar( "") int ... –

+0

**値を取り出すために選択した関数が.text()です。いいえ、あなたの質問からコピーしました。通常、私は 'val()'メソッドを使って選択したオプションの値を使用します。どのようにドロップダウンを構築しているのかを見ることなく、 'val()'を使うように言うことはできません!したがって、私はあなたの既存のコードをコピーしました。はい。マルチプルアイテムを送ることができます。送信したい値が1つだけあれば、別のクエリーストリングアイテムとして送信することができます。より多くのデータを送信する必要がある場合は、$。postに変更して、必要なものを送信します。 $ .postを使用する場合、制限はありません。 – Shyju

1

MVCビューは単なるテンプレートです。 C#とJavaScriptの間の相互運用性はありません。むしろ、あなたのC#変数は単純にテキストの置換を引き起こします。したがって、これらの行:

$el.on("change", @selection = selected); 
alert(@selection); 

...単にC#selectionの値をとり、置換を実行します。 selectionは、C#で"foo"に設定されている場合、出力されたJavaScriptがあるので:

$el.on("change", foo = selected); 
alert(foo); 

changeイベントのイベントハンドラの構文は、この仕事をした場合でも、間違っています。さらに、JavaScriptでC#プロパティに値を割り当てることもできません。むしろ、JavaScriptはフォームを送信したり、AJAXリクエストを実行して、処理のためにサーバーにデータを送り返したり、MVCコントローラによって処理されたりする必要があります。

0

短い回答: @は、クライアントコードではなくサーバーコードであることを意味します。ページがユーザーに送信される前に実行されます。サーバーが終了し、ユーザーがページを取得すると、JavaScriptコードが実行されます。

関連する問題