2015-01-09 72 views
1

我正在循環訪問模型並遍歷數據。我想在每個產生action/id的項目上添加一個按鈕。MVC + T4MVC - 如何傳遞一個url動作來形成?或者生成action/id的替代方法?

正如我無法將URL添加到一個按鈕,我已經決定要使用的一種形式有以下:

<form action="@Url.Action("ItemDetail", new { itemId = @quote.Item.ItemID})"> 
    <button class="btn-bg btn-sm btn-inverse btn-fix-width" type="submit"> 
     <i class="fa fa-th-list fa-fw pull-right"></i>View RFQ 
    </button> 
</form> 

我選擇了一個按鈕,而不是輸入型地內陷式字體真棒圖標。

但是,我得到/Quote/ItemDetail?而不是/報價/ ItemDetail的itemId = 123

我使用T4MVC

控制器:

public virtual ActionResult ItemDetail(int ItemID) 
{ 
    return View(); 
} 

RouteConfig:

routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
+2

嘗試使用@ Url.Action(「ACTION」,「CONTROLLER」,new {itemId = @ quote.Item.ItemID})或@Url。Action(「ACTION」,「CONTROLLER」,null,new {itemId = @ quote.Item.ItemID}) – Zaphod

+0

你可以把控制器代碼放在這裏嗎? – renefc3

+0

@Zaphod忘了提及我正在使用T4MVC – DarkShadowAY

回答

4

隨着T4MVC,像這應該工作:

<form action="@Url.Action(MVC.Quote.ItemDetail(quote.Item.ItemID))"> 

...請注意,這是假設ItemDetail行動是在您的QuoteController。如果控制器名稱不同,請將Quote更改爲控制器的名稱。

你也可以去多與@贊福德的評論,做這樣的事情:

<form action="@Url.Action(MVC.Quote.ActionNames.ItemDetail, MVC.Quote.Name, 
    new { itemId = @quote.Item.ItemID})"> 

...至少在這裏T4MVC擺脫你的魔法字符串,即使你仍然在使用MVC的出來的方框Url.Action過載。

你也應該使用camelCase,不PascalCase命名的動作方法的參數:

public virtual ActionResult ItemDetail(int itemId) // instead of ItemID 
{ 
    return View(); 
} 

...雖然我不認爲這應該引起任何問題。

更新

試試這個可能?

<form method="GET" action="@Url.Action(MVC.Quote.ItemDetail(quote.Item.ItemID))"> 

或本:

<form method="GET" action="@Url.Action(MVC.Quote.ActionNames.ItemDetail, MVC.Quote.Name)"> 
    <input type="hidden" name="itemId" value="@quote.Item.ItemID" /> 
    <button class="btn-bg btn-sm btn-inverse btn-fix-width" type="submit"> 
     <i class="fa fa-th-list fa-fw pull-right"></i>View RFQ 
    </button> 
</form> 

另一個更新:

你也應該能夠做到這一點,而不是,然後用CSS來讓你的鏈接看起來像一個按鈕:

<a href="@Url.Action(MVC.Quote.ItemDetail(quote.Item.ItemID))"> 
    <i class="fa fa-th-list fa-fw pull-right"></i>View RFQ 
</a> 

恕我直言,這就是你真正的應該這樣做,因爲你只發送一個參數。

+0

嘿謝謝,雖然我仍然得到相同的結果。 – DarkShadowAY

+0

編輯:它檢查裏面鉻的開發人員工具時確實工作!但是,當我點擊按鈕時,我得到:Quote/ItemDetail?在url欄 – DarkShadowAY

+0

@ DarkShadowAY - 所以MVC呈現正確的href屬性,但是當你點擊它時,querystring參數被從URL中剝離出來?我不確定你的意思是「它在鉻開發工具中的作用」。如果是這種情況,請檢查fiddler以查看請求發生了什麼(可能由於某種原因,MVC正在重定向它)。 – danludwig