2013-10-02 77 views
0

我正在創建一個MVC4應用程序。 在我的合同控制器概述頁面我有一個Url.ActionUrl.Action是如何重新格式化URL

int teller = 0; 

      foreach (var item in Model) 
      { 
       <a href="@Url.Action("Details", "Contract",new { id = teller })"> 
        <tr> 
         <td>@Html.DisplayFor(modelItem => item.ContractMSFNo)</td> 
         <td>@Html.DisplayFor(modelItem => item.StageCode)</td> 
         <td>@Html.DisplayFor(modelItem => item.ValidFromView)</td> 
         <td>@Html.DisplayFor(modelItem => item.ValidToView)</td> 

        </tr> 
       </a> 

       teller++; 
      } 

我需要傳遞的ID。我使用的ID在合同控制器的ActionLink的細節

我控制器

public ActionResult Details(int id) 
     { 
      //code 

      return View(contract); 
     } 

當我點擊地址產生鏈接是

http://localhost:4826/Contract/Details/0
/0是id

我想我的網址是http://localhost:4826/Contract/Details

我知道這可以通過Html.Actionlink但這是我的強制使用Url.Action。可以將其與Url.Action

+0

當然你需要'ID'。當用戶點擊其中一個鏈接時,如果您不通過它,您將如何獲得「ID」的價值。無論你做什麼都很好。 – Satpal

+0

這就是我問的是,有什麼辦法,我的網址應該出現'http:// localhost:4826 /合同/詳細信息(即沒有ID)? – user2739679

+1

然後,您必須創建表單,在隱藏字段中存儲「ID」並提交表單 – Satpal

回答

1

它不能被路由或ActionLink的完成。但是你可以嘗試使用會話。

1)添加到您的控制器,新方法,您的ID保存到會話:

public JsonResult Save(int id) 
{ 
    Session["ID"] = id; 
    return Json("Success"); 
} 

2)加入jQuery的方法來在會話數據從景觀保存和刪除Url.Action參數:

<a class="mylink" href="@Url.Action("Details", "Contract")"></a> 

<script> 
$(".mylink").click(function(){ 
    var data = { id : teller}; //**teller is from your example 
    $.get("@Url.Action("Details", "Contract")", data) 
}); 

</script> 

3)更改您詳細的ActionResult從會話中獲取ID:

public ActionResult Details() 
     { 
      var id = (int)Session["ID"]; 

      //code 

      return View(contract); 
     } 

P.S:問問你的客戶,他希望如何給外界提供精確的外部鏈接。如果url沒有參數,這將是不可能的。這對SEO很不好。

0

來來達到的。如果你希望在無id參數您的網址,根本不把它傳遞給Url.Action()方法,如下所示:

@Url.Action("Details", "Contract") 
+0

否我需要傳遞該ID。我們在合同控制器的ActionLink細節中使用了id。 – user2739679

+0

您需要通過Id,但您希望我的網址爲http:// localhost:4826/Contract/Details'? – haim770

+0

是的。這是客戶需求 – user2739679

0

如果添加如{ id = teller}然後路由自動添加id參數結束的鏈接。如果你不需要ID參數,這個URL您需要刪除

new { id = teller } 

最終版本是這樣

@Url.Action("Details", "Contract") 
+0

不,我需要通過身份證。我們在合約控制器 – user2739679

+0

的ActionLink細節中使用了id好的,如果這是一個詳細頁面(你只有一個id),你可以使用session或類似的東西。否則,我不知道任何其他方式來通過Id沒有參數。 –

+0

實際上沒有很多ID ...代碼是'foreach(模型中的var item) { ' – user2739679

0

OK,閱讀本評論:「沒有實際上有許多IDS ...代碼的foreach(在型號VAR項){」,我不知道我知道你真正想要達到的目標。您正將一個參數傳遞給視圖,該視圖只能有一個值。你確定你不是在尋找類似的東西:

foreach (var item in Model) 
{ 
    <a href="@Url.Action("Details", "Contract",@item.ID> 
    ... 
} 

改爲?ID在URL中可見或不可見的事實似乎是另一個問題,不是嗎?