2013-10-02 49 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中可见或不可见的事实似乎是另一个问题,不是吗?