我從你的代碼假設這是一個Asp.Net MVC項目,使用C#作爲語言。
有很多問題。第一個是equipmentID變量沒有被傳遞給視圖。有很多方法可以做到這一點。最簡單的將是做在使用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調用中您在equipmentID前面使用@表示您可能需要研究一下Razor語法。一個好的開始是Phil Haack's Razor Syntax Quick Reference。 Razor語法告訴解析器你的視圖的哪些部分是靜態HTML,它應該按原樣輸出,哪些部分是在發送到瀏覽器之前應該執行的C#代碼。如果您使用Visual Studio作爲您的IDE,那麼突出顯示代碼的哪些部分被解釋爲C#代碼以及哪些部分是普通HTML是非常好的。
在下面的屏幕截圖中,您可以看到VS2012以淺灰色背景色突出顯示C#代碼。 @符號是C#代碼的開始 - 因此除非您跳出C#代碼塊並返回到HTML,否則不需要再次使用它。
第三,你可能不會想通過設備ID爲您的表單標籤內的HTML屬性。你應該在表單體中創建一個隱藏的表單字段,並將名稱設置爲equipmentID,並將該值設置爲該變量的值。目前正在使用的話將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>
}
好吧,所以我刪除了FormMethod.Get參數,它的作品完美(和@不應該在那裏)。現在我的問題是,爲什麼?我已經看到了FormMethod.Get的視圖代碼,它們應該能夠像我讀過的一樣工作。我是否缺少需要在控制器中工作的內容? –