有没有办法从ASP.NET MVC中的链接中删除ID

时间:2014-02-19 10:03:03

标签: javascript asp.net-mvc

我正在研究ASP.NET MVC项目。我现在面临一个问题。当我点击下拉列表中的添加列表选项时,我会从一个操作重定向到另一个操作。

这是我用于重定向的脚本:

 $("#DrpList").change(function (e) {
     if ($(this).val() == 'Add List') {
         document.location.href = 'http://localhost:1234/report/Index/indexid'

这里 indexid 只是我传递的随机ID,它是静态的,所以我可以在我的索引控制器和我需要的显示视图中进行比较。

这里我想要的是,在我将 indexid 参数传递给索引后,当显示索引页面时,我可以在我的链接中看到indexid,

http://localhost:1234/report/Index/indexid

但我只需要显示,

http://localhost:1234/report/Index 

我试着这样做:

return view("Index", "report", new{id = ""});

但它不起作用。那我怎么能实现这个呢?

更新:

 public ActionResult Index(string id)
    {
  if (id == "indexid")
  {
  //Here Add items to list
 return View("Index", "report", new { id = "" });
  }

2 个答案:

答案 0 :(得分:0)

您的报告控制器索引操作签名应使用indexid而非默认id。 indexid也应该是nullable

public class ReportController:Controller
{

   public ActionResult Index(string indexid)
   {

   }

}

 return view("Index", "report", new{indexid= ""});

答案 1 :(得分:0)

您可以根据需要使用ActionFilter进行路由。创建一个ActionFilter,如下所示 -

public class MyFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var rd = filterContext.RouteData;
        if(rd.Values.Keys.Contains("id"))
        {
            filterContext.HttpContext.Items["key"] = rd.Values["id"];
            rd.Values.Remove("id");
            filterContext.Result = new RedirectResult("/Controller/Index");
        }
    }
}

然后在您将ID作为值传递的操作上使用此过滤器 -

    [MyFilter]
    public ActionResult Index()
    {
        return View();
    }

您可以使用HttpContext.Items["id"]访问操作中的ID值。

当您向包含网址/Controller/Action/indexid的网页发出请求时,系统会将其重定向到/Controller/Index