执行以下行
@Html.ActionLink("Open",actionName: "DownloadExcelFile",
controllerName: "Excel",
routeValues: new { model = new ExcelModel(5, "JobName", "item.UserName") },
htmlAttributes: null)
在'/'应用中返回服务器错误,你能帮我解决一下吗?
请注意,当我更改参数名称时,模型 - > ID ,我在'应用程序中得到错误404 而不是服务器错误。
模型是
public class ExcelModel
{
public int InputA { get; set; }
public string InputB { get; set; }
public string UserName { get; set; }
public ExcelModel(int inputA, string inputB, string userName)
{
InputA = inputA;
InputB = inputB;
UserName = userName;
}
public ExcelModel()
{
InputA = 1;
InputB = "B1";
UserName = "NiceUser";
}
...
}
控制器是
public class ExcelController : Controller
{
public ActionResult Index()
{
var model = new ExcelModel(1, "B1", User.Identity.Name);
return View(model);
}
[HttpPost]
public ActionResult DownloadExcelFile(ExcelModel id)
{
// assume we create an an excel stream...
MemoryStream excelStream = id.BuildSpreadsheet();
return new FileStreamResult(excelStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
{
FileDownloadName = "myfile.xslx"
};
}
}
RouteConfig 是标准的
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
最后,如前所述,该方法本身很好,因为它与提交完美配合,如下所示:
@using (Html.BeginForm("DownloadExcelFile", "Excel"))
{
<fieldset>
// fields names and values
<p>
<input type="submit" value="Open Excel"/>
</p>
</fieldset>
}
答案 0 :(得分:1)
您的控制器方法标有HttpPost
属性。这意味着它只接受POST请求而不接受GET请求。正常链接访问是GET请求,因此可能是问题。 (Read more here)
删除HttpPost
属性,看看是否能解决问题。
答案 1 :(得分:1)
1)您不能将整个类作为路由值参数传递。帮助程序必须能够将您传递的任何内容放入URL中,这意味着它必须是可以转换为字符串值的东西。有可能对模型进行JSON编码,然后为param传递JSON字符串,但是帮助程序不会为您做出这样的假设,也不一定知道 如何对JSON进行编码对你来说,如果有的话。
2)当你刚刚传递id时,你会得到一个404,因为你的动作不接受id
的int,而是期望ExcelModel
,正如我们在#1中所讨论的那样,无法通过网址传递。