0

我正在创建一个 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++;
            }

我需要传递身份证。我在合同控制器的 ActionLink 详细信息中使用 id

我的控制器是

public ActionResult Details(int id)
        {
            //code

            return View(contract);
        }

当我点击生成的链接 URL

http://localhost:4826/Contract/Details/0
/0是标识

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

我知道这可以通过Html.Actionlink来实现,但这是我使用Url.Action的冲动。可以用Url.Action 实现吗

4

4 回答 4

2

它不能通过路由或 ActionLink 来完成。但是你可以尝试使用 session.

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

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

2) 添加 jQuery 方法以从 View 中保存会话中的数据并从 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);
        }

PS:询问您的客户,他希望如何提供外部链接。如果 url 没有参数,那将是不可能的。这对SEO非常不利。

于 2013-10-02T11:03:38.743 回答
0

好的,阅读此评论:“实际上没有很多 ids ... 代码是 foreach (var item in Model) { ”,我不确定我是否理解您真正想要实现的目标。您正在向视图传递一个参数,该参数只能有一个值。你确定你不是在寻找类似的东西:

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

反而?ID 在 URL 中是否可见的事实似乎是另一个问题,不是吗?

于 2013-10-02T14:10:32.257 回答
0

如果你想要你的 URL 不带id参数,只需不要将它传递给Url.Action()方法,如下所示:

@Url.Action("Details", "Contract")
于 2013-10-02T06:34:20.660 回答
0

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

new { id = teller } 

像这样的最终版本

@Url.Action("Details", "Contract")
于 2013-10-02T06:37:42.473 回答