Asp.Net mvc将模型传递给ActionLink

时间:2015-12-12 23:34:59

标签: asp.net-mvc

那为什么这不适合我呢? 我有一个actionlink,它应该将模型实例带回控制器。

问题视图

@foreach (var question in Model.Select(item => item as Question))
{
  ..
  @Html.ActionLink(@question.Title, "SingleQuestion", "Posts", question, null)
  ..
}

控制器

public ActionResult SingleQuestion(Question question)
{
   return View();
}

这不起作用 的错误 enter image description here

但是在使用此解决方案时: Is there any way to pass a whole model via html.actionlink in ASP.NET MVC 3?

确实如此,这是因为模型实例可以复杂吗?

由于

2 个答案:

答案 0 :(得分:3)

Html.ActionLink辅助方法会生成一个锚标记并点击该标记,通常会对目标网址发出GET请求。

您不应该尝试将复杂对象传递给GET操作方法。您应该传递一个唯一的ID,使用该ID可以重建/重新查询复杂对象并在视图中使用它。

@foreach (var question in Model.Select(item => item as Question))
{
  <p>
  @Html.ActionLink(@question.Title, "SingleQuestion", "Posts",
                                               new {questionId=question,Id}, null)
  </p>
}

在你的GET Action方法中

public ActionResult SingleQuestion(int questionId)
{
   Question q = GetQuestionFromSomeWhere(questionId);
   if(q!=null)
   {
     return View(q);
   }
   return View("NotFound");
}

答案 1 :(得分:0)

对于Question类,添加至少1个没有参数的空构造函数:

public class Question {
     public Question () {} //add this
     public Question (string param1) { //your constructor }
}