2016-08-13 64 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 !!!

我也無法理解爲什麼我不能使用任何類型的,如果@符號參與JavaScript變量的值,將appresiate的解釋,如果你有時間或鏈接,以幫助.....

+0

你在哪裏設置變量值?你是從一個JS變量設置值? – Shyju

+0

是...試圖... $ el.on(「change」,@selection = selected); –

回答

0

您不能像您嘗試的方式在客戶端代碼中設置C#變量值。因爲當剃鬚刀執行時,它會執行其中的C#代碼(在服務器),並將其結果(可能是字符串)發送給客戶端以呈現頁面所需的標記(檢查視圖頁面的來源)。

所以如果你需要在你的服務器代碼使用此,你需要做一個Ajax調用,如果你想選擇的項目價值的價格向服務器發送

所以,讓一個AJAX調用您的服務器併發送選定的選項值並使用該值計算價格並將其返回。

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

假設GetPrice接受與名稱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中提取日期值。編輯器選擇的日期,但以你建議它將空白值拖入var(「」)的方式,可能是因爲你選擇用於提取值的函數是.text() - 我創建的ActionResult接受DateTime值來完成工作並返回一個int ... –

+0

**,因爲您選擇用於拉取該值的函數是.text()**。不,我從你的問題中複製它。通常我使用'val()'方法選擇選項的值。沒有看到你如何構建下拉列表,我不能告訴你使用'val()'!因此我複製了你現有的代碼。是。您可以發送multipple項目,如果它只是您想要發送的另一個值,您可以將其作爲另一個querystring項目發送。如果您必須發送更多數據,請將其更改爲$ .post併發送您想要的任何內容。使用$ .post時沒有限制。 – Shyju

1

MVC視圖僅僅是模板; C#和JavaScript之間沒有任何的互操作。相反,您的C#變量只會導致文本替換。因此,這些行:

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

...只需取C#selection值並執行替換。所以,如果selection設置爲"foo"在C#,即輸出是JavaScript:

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

change事件的事件處理語法,即使這沒有工作不正確。另外,您不能讓JavaScript爲C#屬性賦值。相反,JavaScript必須提交表單或執行AJAX請求才能將數據發送回服務器進行處理,並由MVC控制器處理。

0

簡短回答: @意味着它是服務器代碼,而不是客戶端代碼。它在頁面發送給用戶之前被執行。一旦服務器完成並且用戶獲得頁面,JavaScript代碼就會被執行。

相關問題