我正在尝试将ViewBag.OrderId
设置为数据属性data-orderId
的值,但我在=
上收到语法错误:
@foreach (var order in Model.Orders)
{
<a class="btn-add-note" data-orderId="@order.db_OrderNo">Add</a>
}
JS:
$(".btn-add-note").click(function(){
@ViewBag.OrderId = $(this).attr("data-orderId");
});
任何人都知道为什么我会收到此语法错误?
说明:
此处显示的代码是局部视图。点击后,它会在其父视图中打开一个模态。模态中有一个表单,需要从局部视图中选择orderId。然后将orderId作为参数传递给表单提交中的控制器。我一直在找出最好的方法,所以我试图将ViewBag.OrderId
设置为值,所以我不必尝试将其传递给表单。
让我知道这是否令人困惑,或者是否需要更多细节。
谢谢!
答案 0 :(得分:1)
你要做的事情是行不通的;在JS代码工作之前,@ViewBag.OrderID
已经呈现过了。您必须评估客户端上的所有内容,如果需要在服务器上访问它,请将值存储在隐藏字段中或使用AJAX将其发送到服务器。
请提供更多关于您要做的事情的信息,我们可以提供进一步帮助。
答案 1 :(得分:0)
您无法混合服务器端和客户端代码。
然而,您可以执行的操作是将一个隐藏字段存储在OrderId中,然后在加载模式后检索。
在您的视图中添加隐藏字段
<input type="hidden" id="orderId" value="" />
然后将其设置为您尝试使用ViewBag
$(".btn-add-note").click(function(){
$('#orderId').val($(this).attr("data-orderId"));
});
现在,您可以从隐藏的任何地方获取OrderId。
如果您需要控制器上的OrderId来加载表单,只需添加一个控制器操作来设置ViewBag属性
[HttpPost]
public void SetOrderId(string orderId)
{
ViewBag.OrderId = orderId;
}
然后让您的点击事件调用此操作
$(".btn-add-note").click(function(){
$.ajax({
url: '@Url.Action("SetOrderId", "ControllerName")',
type: 'POST',
data: { orderId = $(this).attr("data-orderId") }
});
});