语法错误设置ViewBag到数据属性

时间:2015-10-08 19:55:28

标签: javascript c# jquery asp.net-mvc razor

我正在尝试将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设置为值,所以我不必尝试将其传递给表单。

让我知道这是否令人困惑,或者是否需要更多细节。

谢谢!

2 个答案:

答案 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") }
    });
});