【问题标题】:Passing data from a View to a controller in ASP.Net MVC在 ASP.Net MVC 中将数据从视图传递到控制器
【发布时间】:2011-02-11 04:33:40
【问题描述】:

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

Controller Action 在 ViewData 中将 Dictionary 传递给 Controller:

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

View 打印出 Dictionary 的内容,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
        }

【问题讨论】:

  • 代码将有助于更清楚地解释您的问题。看起来 RedirectToAction() 可能对您的情况有所帮助。

标签: asp.net asp.net-mvc web-applications


【解决方案1】:

如果没有按钮或表单,我会说最好的办法是将链接挂钩到 Javascript 或 jQuery 方法,然后使用 AJAX 或 JSON 将数据发送回控制器。

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

【讨论】:

  • 嗨罗伯特,很遗憾我不允许使用 JS。在想,有没有办法使用 ActionLink 传递表单值?那会解决我的问题。
  • 不是没有 Javascript,AFAIK。您仅限于Submit 按钮行为,因为它在浏览器中由 POSTing 表单的 HTML 规范定义。如果没有运行脚本代码的能力,就无法覆盖链接的正常行为。事实上,没有 Javascript 对您的网页行为施加各种限制(您基本上仅限于简单的整页 GET 和 POST)。
  • 您的客户有两个选择:他们可以允许您使用 Javascript,或者使用按钮。坦率地说,按钮可能是更好的选择,因为它们在语义上将具有正确和预期的行为(提交数据的行为)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多