使用viewbag将数组传递给视图

时间:2015-05-04 00:50:42

标签: asp.net viewbag

我有一个代码,我使用复选框,以便用户选择他的偏好。

这是我控制器中的代码。

[HttpPost]
public ActionResult Selected_Softwares(string[] type){
    var results = db.Softwares_Reports_vw.Where(s => type.Contains(s.software_name)).OrderBy(s=>s.software_name);

//here i tried to pass the parameter to viewbag

ViewBag.type = type;


return PartialView(results);

}

在我看来:

<span style="float:right">  <input type="button" style="border: 2px groove #FBF5EF; background-color:ActiveCaption;"
   class="my-button" value="Export Data To Excel" name="back" 
   onclick="@("location.href='" + Url.Action("toExcel_Results2", "Softwares", new { softwares =  ViewBag.type }) + "'")" /> </span> 

在我的控制器中为excel报告:

public ActionResult toExcel_Results2(string[] softwares)
    {
        Response.AddHeader("Content-Type", "application/vnd.ms-excel");
        return View(db.Softwares_Reports_vw.Where(s => softwares.Contains(s.software_name)).OrderBy(s=>s.software_name);

    }

但这里的参数没有价值。为什么?非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

如果您查看HTML(在浏览器F12工具中)标有&#34;将数据导出到Excel&#34;在您的Softwares \ Selected_Softwares视图中,您将看到类似的内容(查看onclick事件):

<input type="button" style="border: 2px groove #FBF5EF; 
    background-color:ActiveCaption;" class="my-button" 
    value="Export Data To Excel" name="back"   
    onclick="location.href='/Softwares/toExcel_Results2?softwares=System.String[]'">

请注意,您放入ViewBag的对象(字符串[])只是在HTML中按字面意思&#34; System.String []&#34;进行序列化。这是因为所有ASP.NET MVC都在该对象上调用ToString()。当你在字符串[]上调用ToString()时,你得到字符串&#34; System.String []&#34;。

以下是我推荐的内容......您似乎想要将一些数据发送到您的&#34; toExcel_Results2&#34;行动。这通常表示您需要POST而不是GET。这是一个相当简单的解决方案。只需更改Selected_Softwares视图即可包含此内容:

@using (Html.BeginForm("toExcel_Results2", "Softwares", FormMethod.Post, new { id = "MyForm" }))
{
    <span>
        <input type="button" style="border: 2px groove #FBF5EF; background-color:ActiveCaption;"
               class="my-button" value="Export Data To Excel" name="back"
               onclick="document.getElementById('MyForm').submit();" />

        @for (int i = 0; i < ViewBag.type.Length; i++)
        {
            @Html.Hidden("softwares[" + i.ToString() + "]", (string)ViewBag.type[i]);
        }
    </span>
}

有了这个,你就会发现你的&#34; toExcel_Results2&#34; action能够接收完整的字符串数组。