Asp.net mvc 4 操作是如何重新格式化Url

Asp.net mvc 4 操作是如何重新格式化Url,asp.net-mvc-4,url-rewriting,url-routing,Asp.net Mvc 4,Url Rewriting,Url Routing,我正在创建一个MVC4应用程序。 在我的合同控制人概述页面中,我有一个Url.Action int teller = 0; foreach (var item in Model) { <a href="@Url.Action("Details", "Contract",new { id = teller })"> <tr>

我正在创建一个MVC4应用程序。 在我的合同控制人概述页面中,我有一个Url.Action

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++;
            }
当我点击链接时,生成的Url

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

/0是id

我希望我的Url是
http://localhost:4826/Contract/Details


我知道这可以通过Html.Actionlink来实现,但我强迫自己使用Url.Action。可以通过Url.Action实现吗?如果您希望您的Url不带
id
参数,只需不将其传递给
Url.Action()
方法,如下所示:

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

如果您添加like{id=teller},那么路由会自动在链接的末尾添加id参数。如果此url不需要id参数,则需要删除

new { id = teller } 
像这样的最终版本

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

这不能通过路由或ActionLink完成。但您可以尝试使用会话

1) 向控制器添加新方法以将id保存到会话:

public JsonResult Save(int id)
{
    Session["ID"] = id;
    return Json("Success");
}
2) 添加jQuery方法以从视图保存会话中的数据,并从Url中删除参数。操作:

<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>

p.S:询问您的客户,他希望如何给sombody提供外部链接。如果url没有参数,这将是不可能的。这对搜索引擎优化非常不利。

好的,阅读下面的评论:“不,实际上有很多ID…代码是foreach(模型中的var项){”,我不确定我是否理解您真正想要实现的目标。您正在向视图传递一个参数,该参数只能有一个值。您确定您没有寻找类似以下内容的内容:

foreach (var item in Model) 
{ 
   <a href="@Url.Action("Details", "Contract",@item.ID>
   ...
}
foreach(模型中的变量项)
{ 

否我需要传递ID。我们正在合同控制器的ActionLink详细信息中使用ID。您“需要传递ID”,但您“希望我的Url为”?“是的。这是客户端的要求”我很抱歉,但在这里我必须问:你的客户比你更了解网络编程和向URL传递参数吗?如果是,请他展示他是如何做到的,如果不是,请他让你做这项工作……不,我需要传递ID。我们在Contract ControllerOk的ActionLink详细信息中使用ID,如果这是一个详细信息页面(您只有一个id)您可以使用会话或类似的东西。否则,我不知道没有参数传递id的其他方法。不,实际上有很多id…代码是
foreach(模型中的var项){
您当然需要
ID
。当用户单击其中一个链接时,如果您没有传递
ID
的值,您将如何获得该值。无论您做什么都是好的。这就是我要问的,有没有办法让我的url出现
http://localhost:4826/Contract/Details
(即没有id)然后您必须创建表单,将
ID
存储在hiddenfield中并提交表单
public ActionResult Details()
        {
            var id = (int)Session["ID"];

           //code

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