加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何链接到将数组作为参数(RedirectToAction和/

发布时间:2020-12-16 09:57:39 所属栏目:asp.Net 来源:网络整理
导读:我有一个像这样定义的动作: public ActionResult Foo(int[] bar) { ... } 像这样的网址将按预期工作: .../Controller/Foo?bar=1bar=3bar=5 我有另一个动作做了一些工作,然后重定向到上面的Foo动作的一些计算值的bar. 有没有一种使用RedirectToAction或Acti
我有一个像这样定义的动作:

public ActionResult Foo(int[] bar) { ... }

像这样的网址将按预期工作:

.../Controller/Foo?bar=1&bar=3&bar=5

我有另一个动作做了一些工作,然后重定向到上面的Foo动作的一些计算值的bar.

有没有一种使用RedirectToAction或ActionLink指定路由值的简单方法,以便像上面的示例一样生成url?

这些似乎不起作用:

return RedirectToAction("Foo",new { bar = new[] { 1,3,5 } });
return RedirectToAction("Foo",new[] { 1,5 });

<%= Html.ActionLink("Foo","Foo",5 } }) %>
<%= Html.ActionLink("Foo",5 }) %>

但是,对于数组中的单个项,这些可以工作:

return RedirectToAction("Foo",new { bar = 1 });
<%= Html.ActionLink("Foo",new { bar = 1 }) %>

将bar设置为数组时,它会重定向到以下内容:

.../Controller/Foo?bar=System.Int32[]

最后,这是ASP.NET MVC 2 RC.

谢谢.

解决方法

有几种方法可以做到这一点.如果你想保持无状态,请避免使用
TempData并创建一个动作过滤器.

像这样的东西:

ActionFilter:

public class BindArrayAttribute:ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var keys = filterContext.HttpContext.Request.QueryString.AllKeys.Where(p => p.StartsWith("id"));

        var idArray = new int[keys.Count()];

        var counter = 0;
        foreach (var key in keys)
        {
            var id = filterContext.HttpContext.Request.QueryString[key];
            idArray[counter] = int.Parse(id);
            counter++;
        }

        filterContext.ActionParameters["id"] = idArray;

        base.OnActionExecuting(filterContext);
    }
}

控制器:

[HttpPost]
    public ActionResult Index(ItemModel model)
    {
        var dic = new RouteValueDictionary();

        var counter = 0;
        foreach (var id in model.SelectedItemIds)
        {
            dic.Add("id" + counter,id);
            counter++;
        }

        return RedirectToAction("Display",dic);
    }

    [HttpGet]
    [BindArray]
    public ActionResult Display(int[] id = null)
    {
        return View(id);
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读