我正在尝试将复选框的值保存在查询字符串中具有相同名称(级别和coursetype)的表单中,以便我可以检查选择了哪些。在第一次提交中,我得到:
Search?coursetype=1416&coursetype=post16&level=3&level=6&level=1
这很好,所以我可以将值检查回视图并勾选之前选择的值。
但是,当我使用pagedList或Html.ActionLink时,例如:
Html.ActionLink("search again", "Search", new { coursetype = ViewData["coursetype"], level = ViewData["level"]})
我得到:Search?&coursetype=System.String%5B%5D&level=System.String%5B%5D
我尝试从数组中解析这些值,但是当我将它们发送到ActionLink中的htmlAttributes时,我得到:Search?coursetype%3D1416&coursetype%3Dpost16&level%3D3&level%3D6&level%3D1
,因此视图无法找到复选框的值。
控制器:
[AcceptVerbs("GET")]
public ActionResult Search(string[] coursetype, string[] level)
{
ViewData["level"] = level;
ViewData["coursetype"] = coursetype;
return View();
}
答案 0 :(得分:1)
您使用的是强类型搜索视图吗?
我认为您会想要使用ViewModel在视图和控制器之间传递数据。
public class CourseViewModel
{
public string Level { get; set; }
public string CourseType { get; set; }
}
然后你的视图会被强烈输入到CourseViewModel中,所以你可以像这样构建你的ActionLink:
Html.ActionLink("search again", "Search", new { coursetype = Model.CourseType, level = Model.Level })
你的控制器看起来像这样:
[AcceptVerbs("GET")]
public ActionResult Search(string coursetype, string level)
{
var viewModel = new CourseViewModel
{
CourseType = coursetype,
Level = level
};
return View(viewModel);
}
希望这会有所帮助。我不确定这是不是你想要的,但如果你有任何问题,请告诉我!
答案 1 :(得分:0)
ViewData["..."]
的类型为object
。您希望将其作为string[]
类型传递,因此您必须进行一些小改动:
而不是:
Html.ActionLink("search again", "Search", new { coursetype = ViewData["coursetype"], level = ViewData["level"]})
尝试:
Html.ActionLink("search again", "Search", new { coursetype = ViewData["coursetype"] as string[], level = ViewData["level"] as string[] })
我添加的唯一内容是在as string[]
之后 ViewData["..."]
。
希望有所帮助!