使用 viewbag 将数组传递给视图
Pass an array to the view using 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);
}
但是这里的参数没有值。为什么?非常感谢任何帮助。
如果您在 Softwares\Selected_Softwares 视图中查看标记为 "Export Data To Excel" 的按钮的 HTML(在浏览器 F12 工具中),您会看到类似这样的内容(查看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 中被序列化为 "System.String[]"。这是因为所有 ASP.NET MVC 所做的就是对该对象调用 ToString()。当您在 string[] 上调用 ToString() 时,您会得到字符串 "System.String[]".
以下是我的建议...您似乎想向 "toExcel_Results2" 操作发送一些数据。这通常表示您需要 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>
}
这样,您会发现您的 "toExcel_Results2" 操作能够接收完整的字符串数组。
我有一个代码,我在其中使用复选框让用户选择他的偏好。
这是我控制器中的代码。
[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);
}
但是这里的参数没有值。为什么?非常感谢任何帮助。
如果您在 Softwares\Selected_Softwares 视图中查看标记为 "Export Data To Excel" 的按钮的 HTML(在浏览器 F12 工具中),您会看到类似这样的内容(查看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 中被序列化为 "System.String[]"。这是因为所有 ASP.NET MVC 所做的就是对该对象调用 ToString()。当您在 string[] 上调用 ToString() 时,您会得到字符串 "System.String[]".
以下是我的建议...您似乎想向 "toExcel_Results2" 操作发送一些数据。这通常表示您需要 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>
}
这样,您会发现您的 "toExcel_Results2" 操作能够接收完整的字符串数组。