我设置了以下模型,其中有List<string>
我想要为其添加值:
public class NewShipmentModel
{
...
public List<string> units_selected { get; set; }
public NewShipmentModel()
{
units_selected = new List<string>();
}
}
在我的视图中,我在复选框上设置了一个EventListener,我试图获取该复选框的值,并使用Javascript和Razor从该列表中添加或删除它:
for (var i = 0; i < unitCheckboxes.length; i++) {
unitCheckboxes[i].addEventListener("change", function () {
var addition = 0;
var unit_serial = this.value;
var curr_val = (this.name == "Base") ? parseInt($("#total-bases-selected").text()) : parseInt($("#total-clients-selected").text());
if (this.checked) {
addition = 1;
@Model.units_selected.Add(unit_serial); // ERROR HERE
} else {
addition = -1;
@Model.units_selected.Remove(unit_serial); // ERROR HERE
}
curr_val = curr_val + addition;
if (this.name == "Base")
$("#total-bases-selected").text(curr_val);
else
$("#total-clients-selected").text(curr_val);
}, false);
}
但是,在评论中标记为ERROR HERE
的地方,实际上尝试添加或删除值失败了。问题是它无法访问unit_serial
,因为它似乎超出了Razor的范围:
The name unit_serial does not exist in the current context
如何正确访问变量?这可能吗?
编辑:请注意,数据当前通过submit
按钮和HTTP POST传回控制器。我不确定如何填充此列表和/或在表单的其余部分注入数据。
答案 0 :(得分:1)
它会让你感到困惑的是服务器和客户端代码混乱。 Razor部分总是在服务器上执行。 Javascript - 在客户端上。因此,您无法做到
//note that unit_serial doesn't exist when you're calling Add method because it
//executes during razor view generation on server.
//all javascript code executes after the client receive generated view.
@Model.units_selected.Add(unit_serial);
在javascript代码中间,因为它没有意义。当更改事件处理程序触发复选框时:您将把它发送到服务器进行更新。
为了使其工作,请考虑再创建一个mvc操作并使用ajax将数据传递给服务器。