1

有人可以帮我解决这个问题吗?在页面加载之前的视图底部,我创建了一组复选框,如下所示:

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>(); }

现在我想将该变量发送到控制器,这就是事情变得混乱的地方。如果我发送这样的字符串,它可以正常工作:

剃刀标记

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 }))

并且没有任何东西通过控制器。这就像列表在发布之前被清空。如何将我的列表发送到控制器?

4

1 回答 1

0

我认为您尝试使用列表为表单创建查询字符串/回发 url 的方式是错误的,并且不会生成格式正确的字符串。

也许尝试这样的事情:

@{

    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。

于 2013-04-12T07:31:25.003 回答