【问题标题】:Building array for data input from checkbox in MVC view从 MVC 视图中的复选框构建数据输入数组
【发布时间】:2014-02-05 20:17:46
【问题描述】:

我可能做错了,但它部分工作,所以我希望这是我缺乏正确语法的知识。

我正在从运行正常的 linq 查询构建一个复选框数组。然后我检查答案是否具有与复选框值匹配的值。到目前为止一切顺利,但它不会创建一个数组来输入数据库,它只是返回第一个复选框的值。

你能在我的语法中发现一个错误吗?我对 Razor 非常陌生,并且倾向于坚持使用我知道的 HTML,而不是助手。我会及时学习的!

//    Checkbox
  <div class="checkbox">
  @foreach (var item in q.QuestionOptions.OrderBy(o => o.QuestionOptionRanking))
     {
      if (q.Answer == item.QuestionOption1)
      {
       <input type="checkbox" name="Answer" id="Answer" value="@item.QuestionOption1" checked />@item.QuestionOption1<br />
        **q.Answer = q.Answer + "," + item.QuestionOption1;**
      }
      else
      {
       <input type="checkbox" name="Answer" id="Answer" value="@item.QuestionOption1" />@item.QuestionOption1<br />
      }
     }
</div>

q.Answer 语句什么都不做。请问我应该怎么编码?

还有模型;

namespace Template.Models
{
using System;
using System.Collections.Generic;

public partial class QuestionOption
   {
    public int Id { get; set; }
    public int QuestionId { get; set; }
    public string QuestionOption1 { get; set; }
    public Nullable<int> QuestionOptionRanking { get; set; }

    public virtual Question Question { get; set; }
   }
}

【问题讨论】:

  • 我会为每个item 更改id。我不知道这是否是您问题的根源,但我建议您首先为所有复选框生成唯一 ID。
  • 有机会举个例子吗?有人发布了代码,我试过了,但它不起作用,新的例子不见了!不知道那里发生了什么;但它还是没有用。
  • 那是我,但我误解了你的问题,所以我删除了我的(错误的)答案。您应该发布您的模型定义(即QuestionOptions),以便我们有信息可以构建。
  • 如果您尝试将发布的值绑定到QuestionOption 模型,应该有名称为answer 的属性。此外,它应该是list,在view 中生成的名称应该是[0].answer,[1].answer.....
  • 但答案并不总是一个列表;在其他 3 个条件下,它是一个字符串。也许我试图在一个动作中做太多事情并且应该拆分动作?

标签: c# asp.net-mvc arrays razor checkbox


【解决方案1】:

您应该为每个复选框指定唯一的名称。尝试如下。

 @{
  int count=1;
  string name="Answer"+1;
  foreach (var item in q.QuestionOptions.OrderBy(o => o.QuestionOptionRanking))
 {
  if (q.Answer == item.QuestionOption1)
  {
   <input type="checkbox" name=@name id="Answer" value="@item.QuestionOption1" checked />@item.QuestionOption1<br />
    **q.Answer = q.Answer + "," + item.QuestionOption1;**
  }
  else
  {
   <input type="checkbox" name=@name id="Answer" value="@item.QuestionOption1" />@item.QuestionOption1<br />
  }
  count++;
 }
}

【讨论】:

  • 我设置了这么多断点 - 但它似乎没有在输入之前命中 q.answer = q.Answer... 语句。它只是返回null。我应该将线移到输入模型吗?
【解决方案2】:

MVC 遵循 name 属性进行模型绑定,必须声明所有具有不同 name 属性值的复选框。

How to post a list with MVC Model binding

 <input type="checkbox" name="QuestionOptions[0]" id="Answer" value="@item.QuestionOption1" checked />@item.QuestionOption1<br />
 <input type="checkbox" name="QuestionOptions[1]" id="Answer" value="@item.QuestionOption1" checked />@item.QuestionOption1<br />
 <input type="checkbox" name="QuestionOptions[2]" id="Answer" value="@item.QuestionOption1" checked />@item.QuestionOption1<br />

【讨论】:

  • 我已经尝试过使用 Azim 的建议,但它返回 null。请参阅我对他的回答的评论。
猜你喜欢
  • 2017-09-08
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
相关资源
最近更新 更多