Asp.net mvc 4 操作是如何重新格式化Url
我正在创建一个MVC4应用程序。 在我的合同控制人概述页面中,我有一个Url.ActionAsp.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>
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>
...
}