有人可以帮我解决这个问题吗?在页面加载之前的视图底部,我创建了一个复选框数组,如下所示:
foreach (var course in courses.Select((x, i) => new { Data = x, Index = i }))
{
int currentIndex = course.Index;
String selectedday = "";
String selectedteacher = "";
if (cnt++ % 4 == 0)
{
@: </tr> <tr>
}
@: <td >
<br /><br /><br />
<input type="checkbox" id="checkbox"
name="selectedCourses"
value="@course.Data.CourseID"
@(Html.Raw(course.Data.Assigned ? "checked=\"checked\"" : ""))
/>
我使用相同的循环将指定的状态添加到这样的列表中:
bool theNewString=course.Data.Assigned ;
String a=theNewString.ToString();
assignedCourses.Add(a);
我在页面顶部定义了一个列表变量,以便可以在表格范围内访问它,如下所示:
@{List<String> assignedCourses =new List<String>(); }
现在我想将该变量发送到控制器,这就是事情变得混乱的地方。如果我发送这样的字符串,它可以正常工作:
Razor标记
String postedData = "literalString";
@using (Html.BeginForm("Action", "Controller", new { assigned = @ postedData }))
动作
[HttpPost]
public ActionResult Edit(int id,List<String> assigned){}
现在,如果我试试这个:
@{List<String> assignedCourses =new List<String>(); }
@using (Html.BeginForm("Action", "Controller", new { assigned = @assignedCourses }))
控制器没有任何结果。就像列表在发布之前清空一样。如何将我的列表发送给控制器?
答案 0 :(得分:0)
我认为您尝试使用列表为表单创建查询字符串/回发网址的方式是错误的,并且不会生成格式正确的字符串。
也许尝试这样的事情:
@{
List<string> ExampleList = new List<string>();
ExampleList.Add("True");
ExampleList.Add("False");
string param = string.Join("&", ExampleList.ToArray());
}
@using (Html.BeginForm("index", "home", new { @someparam = (new HtmlString(param)) })) { }
这将要求您在操作方法接收时将单个字符串拆分为数组。
或者您可以尝试使用RouteValueDictionary
而不是列表,但这不支持重复键。
同样对于复选框创建尝试使用@ Html.CheckBox(),因为这将自动创建第二个隐藏输入设置为false。 HTML表单在未选中时不会回发复选框值,因此将返回具有相同名称的第二个隐藏输入,您将知道它已取消选中或未选中。当只返回带有“False”值的隐藏输入时,MVC会将相同形式键/输入名称的“True,False”值解释为True和False。