我从您的代码中假设这是一个 Asp.Net MVC 项目,使用 C# 作为语言。
有很多问题。首先是设备ID 变量没有被传递给视图。有很多方法可以做到这一点。最简单的方法是使用 ViewData 字典在您的控制器中执行此操作,如下所示:
public ActionResult CreateReservation(int equipmentid)
{
// TODO: Query the piece of equipment being reserved.
ViewData["equipmentID"] = equipmentid;
return View();
}
完成此操作后,您可以修改视图代码以使用如下值:
@using (Html.BeginForm("CreateReservation", "ReservationList", FormMethod.Get, new { equipmentID = ViewData["equipmentID"] }))
{
<button class="btn btn-blue">Click</button>
}
这对于一两个值来说很好,但是当视图变得更复杂时,您宁愿创建一个 ViewModel 类,并将该类传递给您的视图。
其次 - 您在 BeginForm 调用中使用设备 ID 前面的 @ 表示您可能需要研究一下 Razor 语法。一个很好的起点是Phil Haack 的 Razor Syntax Quick Reference。Razor 语法告诉解析器视图的哪些部分是静态 HTML,它应该按原样输出,哪些部分是它应该在发送到浏览器之前执行的 C# 代码。如果您使用 Visual Studio 作为您的 IDE,它非常擅长突出显示代码的哪些部分被解释为 C# 代码,哪些部分被解释为普通 HTML。
在下面的屏幕截图中,您可以看到 VS2012 以浅灰色背景色突出显示 C# 代码。@ 符号是 C# 代码的开始 - 因此您不需要再次使用它,除非您跳出 C# 块并返回 HTML。
第三,您可能不想将设备 ID 作为 HTML 属性传递到表单标签中。您应该在表单正文中创建一个隐藏的表单字段,并将名称设置为设备 ID,并将值设置为变量的值。您当前使用它的方式将向表单标签添加一个 HTML 属性,您生成的代码将如下所示:
<form action="/ReservationList/CreateReservation" method="get" equipmentID="1">
而且这个额外的属性将无法在您的代码中检索。而是在你看来做这样的事情:
@using (Html.BeginForm("CreateReservation", "ReservationList", FormMethod.Get, new { name = "myFormName", id = "myFormID" }))
{
@Html.Hidden("equipmentID", ViewData["equipmentID"])
<button class="btn btn-blue">Click</button>
}