我正在研究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 = "" });
}
答案 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