2010-04-22 111 views
0

我有一个字典传递给视图。我希望能够将该字典的值从这个相同的View传递回Controller动作。无论如何,这可以在不使用表格的情况下完成吗?这种情况是我需要能够将这些回传给一个控制器动作,当用户从View中点击一个ActionLink时会调用这个控制器动作,并且根据我的经验,ActionLink不能用于提交表单的值,我只能使用表单的提交按钮提交表单的值。除非有一种方法可以使用ActionLink在表单中提交值。将视图中的数据传递给ASP.Net中的控制器MVC

控制器动作通过字典来控制器中的ViewData:

public ActionResult ModifyNewCrossListing(FormCollection form) 
     { 
      Dictionary<int, string> prefixlist = new Dictionary<int, String>(); 
      ViewDatap["prefixList"] = prefixlist; 
     } 

查看打印出词典的内容,ActionLink的调用另一个控制器动作,这就是我想要访问的词典:

<%int i = 0; 
     if ((ViewData["prefixList"] as Dictionary<int, string>).Count >= 1) 
     { 
      foreach (var cp in (ViewData["prefixList"] as Dictionary<int, string>)) 
      { 
       if (cp.Value == (ViewData["prefixList"] as Dictionary<int, string>).Last().Value) 
       {%> 
        <%= Html.Encode(cp.Value)%> 
       <%} 
       else 
       {%> 
        <%= Html.Encode(cp.Value)%> - 
      <%} 
      } 
     } %> 

<%=Html.ActionLink("View All Criteria", "ShowAllCriteria", new { prefixList = ViewData["prefixList"] as Dictionary<int, string> })%>) 

最后,在我的新控制器操作中,我希望能够访问字典

public ActionResult ShowAllCriteria(Dictionary<int, string> prefixList) 
     { 
      //Do stuff 
     } 
+0

代码将有助于更清楚地解释您的问题。它看起来像RedirectToAction()可能会帮助你的情况。 – 2010-04-22 17:31:03

回答

1

没有一个按钮或表单,我会说你最好的选择是将链接挂钩到Javascript或jQuery方法,并使用AJAX或JSON将数据发送回控制器。

控制器方法可以执行必要的重定向来显示新页面。

+0

嗨罗伯特,不幸的是我不允许使用JS。在想,有没有办法使用ActionLink传递表单值?这将解决我的问题。 – kingrichard2005 2010-04-22 18:02:49

+0

不是没有Javascript,AFAIK。您仅限于“提交”按钮行为,因为它是由HTML规范在发布表单中定义的。如果无法运行脚本代码,则无法覆盖链接的正常行为。事实上,没有Javascript会对网页的行为施加各种限制(您基本上只限于简单的整页GET和POST)。 – 2010-04-22 18:09:08

+0

你的顾客有两种选择:他们可以让你使用Javascript,或者使用按钮。坦率地说,按钮可能是更好的选择,因为从语义上讲,它们将具有正确和预期的行为(即提交数据)。 – 2010-04-22 18:11:07

相关问题