我在将值从视图传递到控制器
时遇到问题这是我的视图:
@model IEnumerable<SQLOperation.Models.QuestionClass.Tabelfields>
@{
ViewBag.Title = "Question";
}
<h3> Question</h3>
@{int i = 0;}
@foreach (var item in Model)
{
using (Html.BeginForm("Question", "Home"))
{
@Html.DisplayFor(modelItem => item.QuestionName)
@Html.HiddenFor(m => item.QuestionID)
<br /><br />
if (item.Option1 != "")
{
@Html.RadioButtonFor(m => item.SelectedOption, item.Option1, item)
@Html.DisplayFor(modelItem => item.Option1)
<br /><br />
}
if (item.Option2 != "")
{
@Html.RadioButtonFor(m => item.SelectedOption, item.Option2, item)
@Html.DisplayFor(modelItem => item.Option2)
<br /><br />
}
if (item.Option3 != "")
{
@Html.RadioButtonFor(m => item.SelectedOption, item.Option3, item)
@Html.DisplayFor(modelItem => item.Option3)
<br /><br />
}
if (item.Option4 != "")
{
@Html.RadioButtonFor(m => item.SelectedOption, item.Option4, item)
@Html.DisplayFor(modelItem => item.Option4)
<br /><br />
}
i = (Int16)i + 1;
if (Model.Count() == i)
{
<input name="btnsumbit" type="submit" value="Submit Feedback"
style="font-family:Segoe UI Light;font-size:medium;"/>
}
}
}
我的控制器:
[HttpGet]
public ActionResult Question(string email)
{
var tf = new QuestionClass.Tabelfields();
IList<QuestionClass.Tabelfields> viewmodel = new List<QuestionClass.Tabelfields>();
var q = QuestionClass.getallQuestion(email).ToList();
foreach (SQLOperation.Models.Question item in q)
{
QuestionClass.Tabelfields viewItem = new QuestionClass.Tabelfields();
viewItem.Email = item.Email;
viewItem.QuestionID = item.QuestionID;
viewItem.QuestionName = item.QuestionName;
viewItem.Option1 = item.Option1;
viewItem.Option2 = item.Option2;
viewItem.Option3 = item.Option3;
viewItem.Option4 = item.Option4;
viewmodel.Add(viewItem);
}
return View(viewmodel);
}
[HttpPost, ActionName("Question")]
public void Question(IEnumerable<QuestionClass.Tabelfields> items)
{
}
我的模型:
public class QuestionClass
{
public static FeedbackDatabaseDataContext context = new FeedbackDatabaseDataContext();
public class Tabelfields : Question
{
//public decimal QuestionID { get; set; }
//public string Email { get; set; }
//public string QuestionName { get; set; }
//public string Option1 { get; set; }
//public string Option2 { get; set; }
//public string Option3 { get; set; }
//public string Option4 { get; set; }
public string SelectedOption { get; set; }
}
public static List<Question> getallQuestion(string email)
{
var list = (from q in context.Questions where q.Email == @email select q);
return list.ToList();
}
}
但是我在控制器的&#34;项目&#34; 中得到NULL。
[HttpPost, ActionName("Question")]
public void Question(IEnumerable<QuestionClass.Tabelfields> items)
{
}
然而,如果我改变我的观点&amp;控制器到下面,我从控制器中的数据库中获取最后一个值
查看:
@foreach (var item in Model)
{
using (Html.BeginForm("Question", "home", new { email=item.Email, q=item.QuestionID}))
{
@Html.DisplayFor(modelItem => item.QuestionName)
@Html.HiddenFor(m => item.QuestionID)
.
.
.
.
}
}
控制器:
[HttpPost, ActionName("Question")]
public void Question(string email,int q)
{
}
我在电子邮件和q
中获得了值那么如何获得所有值,例如QuestionId,Email,Questionname以及它在控制器中的适当选择值(radiobutton)?
即。在控制器:
中[HttpPost, ActionName("Question")]
public void Question(IEnumerable<QuestionClass.Tabelfields> items)
{
}
答案 0 :(得分:2)
你需要索引Html。*对于这样的项目;
@Html.RadioButtonFor(m => m[i].SelectedOption, item.Option3, item)
为了简化事情,我可能会摆脱foreach
&amp;并单独i
声明并使用以下内容;
@for(int i=0; i < Model.Count; i++)
{
@Html.HiddenFor(m => m[i].QuestionID)
@Html.RadioButtonFor(m => m[i].SelectedOption, Model[i].Option3, Model[i])
}
等
这样的索引将导致html在索引完整的情况下呈现:
<input type='hidden' name=[0].'QuestionId' />
<input type='hidden' name=[1].'QuestionId' />
<input type='hidden' name=[2].'QuestionId' />
而不是你当前正在做什么,最终呈现为这样;
<input type='hidden' name='QuestionId' />
<input type='hidden' name='QuestionId' />
<input type='hidden' name='QuestionId' />
如果没有索引,每个表单字段都会被赋予相同的名称,因此您只需要控制器就会认为只返回了一个。