【问题标题】:ASP.NET MVC - Cannot pass string[] value to another Controller actionASP.NET MVC - 无法将字符串 [] 值传递给另一个控制器操作
【发布时间】:2014-04-22 11:37:04
【问题描述】:

我正在尝试将字符串数组(具有两个值)从控制器动作传递到另一个动作。 但第二个动作只有这个值:'System.String[]'

它将值从视图传递到控制器动作。但是当我尝试传递另一个时它只是传递空字符串。

Html(剃刀)

   @using (Html.BeginForm("AnnouncementCreate", "Administrator",   FormMethod.Post, new { id = "form" }))  
        {
         //There are another html elements....
      <label class="checkbox-inline">

            <input type="checkbox" name="tags" id="web" value="web" checked="checked" />
            <span>Web</span>
         </label>

        <label class="checkbox-inline ">
           <input type="checkbox" name="tags" id="ambulance" value="client" checked="checked" />
            <span>Ambulance Client</span>
        </label>

控制器:

public ActionResult AnnouncementCreate(NewsItem NEWS, Guid RSSCATEGORY,Guid NEWSIMAGETYPE,string[] tags)
 //tags variable have two values: [0]:web  , [1]:client    
 {
   ....

   //I want to Pass current string[] values to another Action  
  return RedirectToAction(actionName: "Announcements", routeValues: new { tags = tags });
    }

  //2nd action method 
  public ActionResult Announcements(string[] tags)
    {
      //tags variable has this value:  [0]: System.String[]   

     }

【问题讨论】:

  • 如何在第一个操作中分配tags 变量?
  • 它由html上的输入元素分配。
  • 尝试使用 RouteValueDictionary 重载,而不是只传递一个匿名对象。

标签: c# asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

我认为最好使用 TempData,像这样:

public ActionResult AnnouncementCreate(NewsItem NEWS, Guid RSSCATEGORY,Guid NEWSIMAGETYPE,string[] tags)
 //tags variable have two values: [0]:web  , [1]:client    
{
   ....
    TempData["tags"] = tags;
    return RedirectToAction(actionName: "Announcements");
}

  //2nd action method 
public ActionResult Announcements()
{
    var tags = (string[]) TempData["tags"];
}

祝你好运!

【讨论】:

  • @balron,如果解决了您的问题,您可以将其标记为答案;)
【解决方案2】:

MVC 似乎不喜欢很好地处理数组。

如果你坚持使用它们,这是我发现的最优雅的实现方式。

工作概念证明...原谅 VB

  Dim rv As RouteValueDictionary = New RouteValueDictionary

  rv.Add("tags[0]", "Test1")
  rv.Add("tags[1]", "Test2")

  Return RedirectToAction("Announcements", "Home", rv)

从这里借来的:ASP.Net MVC RouteData and arrays

【讨论】:

    【解决方案3】:

    你可以为列表更改字符串[]

    【讨论】:

    • 现在,它不能将列表值传递给第二个操作方法
    • 你可以使用viewbag吗?还是会话?
    猜你喜欢
    • 2010-10-23
    • 2011-04-03
    • 2011-07-25
    • 2011-01-01
    • 2016-11-08
    • 2019-07-02
    • 2021-02-14
    • 2020-11-01
    相关资源
    最近更新 更多