在MVC视图中使用c#属性时没有设置变量
本文关键字:设置 变量 属性 视图 MVC | 更新日期: 2023-09-27 18:02:22
我很抱歉,如果这是一个新手的问题,但谁能告诉我为什么我不能设置一个变量值为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,我试着用另一个变量来设置它,像这样:
@selection = selected;
仍然是0 !!
我也不明白为什么我不能使用任何类型的javascript变量,如果@符号涉及,将感激一个解释,如果你有时间或链接帮助.....
MVC视图只是模板;c#和JavaScript之间没有任何形式的互操作。相反,c#变量只会导致文本替换。因此,这些行:
$el.on("change", @selection = selected);
alert(@selection);
…简单地取c# selection
值并执行替换。因此,如果在c#中将selection
设置为"foo"
,则输出的JavaScript为:
$el.on("change", foo = selected);
alert(foo);
change
事件的事件处理程序语法是不正确的,即使这确实工作。另外,你不能让JavaScript给c#属性赋值。相反,JavaScript必须提交表单或执行AJAX请求将数据发送回服务器进行处理,然后由MVC控制器处理。
您不能像您尝试的那样在客户端代码中设置c#变量值。因为当razor执行时,它执行其中的c#代码(at server),其结果(可能是字符串)将被发送到客户端以呈现页面所需的标记。(查看页面的视图源)。
如果你需要在服务器代码中使用这个,你需要进行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);
}
简短的回答:@表示它是服务器代码,而不是客户端代码。它在页面发送给用户之前执行。一旦服务器完成并且用户获得页面,javascript代码将被执行。