基本上我正在尝试使用MVC创建一个带有四个答案(单选按钮)的问题的反馈表单。
在视图中:我可以通过radiobutton获得每个答案的问题和答案。
在控制器中:我在这里感到困惑。
我想发送选定的问题&从View到控制器的答案。
我的观点:
@model IEnumerable SQLOperation.Models.QuestionClass.Tabelfields
@{int i = 0;}
@foreach (var item in Model)
{
using (Html.BeginForm("Question", "home", new {email=item.Email}))
{
@Html.DisplayFor(modelItem => item.QuestionName,item)
<br /><br />
if (item.Option1 != "")
{
@Html.RadioButtonFor(modelItem =>item.SelectedOption, item.Option1, item)
@Html.DisplayFor(modelItem => item.Option1)
<br /><br />
}
if (item.Option2 != "")
{
@Html.RadioButtonFor(modelItem => item.SelectedOption, item.Option2)
@Html.DisplayFor(modelItem => item.Option2)
<br /><br />
}
if (item.Option3 != "")
{
@Html.RadioButtonFor(modelItem =>item.SelectedOption, item.Option3)
@Html.DisplayFor(modelItem => item.Option3)
<br /><br />
}
if (item.Option4 != "")
{
@Html.RadioButtonFor(modelItem =>item.SelectedOption, item.Option4)
@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(string Email,QuestionClass.Tabelfields tf)
{
}
我的模特:
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 int 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();
}
}
我没有得到问题,而且它是在控制器中使用适当的电子邮件选择的选项。
如何在控制器中获取它?
答案 0 :(得分:1)
To,首先在视图中包含断点,然后检查值是否正在传递。
接下来,从
更改方法签名 public void Question(string Email,QuestionClass.Tabelfields tf)
到
public void Question(string email, QuestionClass.Tabelfields tf)
另外,我看到你使用了一些奇怪的语法(考虑到m也是MVC的新手),你可以简单地使用这个
@Html.DisplayFor(modelItem => item.QuestionName)
而不是
@Html.DisplayFor(modelItem => item.QuestionName,item)
而且,我见过你profile,我知道你是StackOverflow的新手,所以欢迎来到StackOverflow!你可能想阅读this&amp; this也是如此。干杯!
更新:
您正在使用它来显示单选按钮......
@Html.RadioButtonFor(modelItem =>item.SelectedOption, item.Option1, item)
什么是item.Option1,我可以看到你已经注释掉了Opion1,2,3,4。或者你还在使用它们吗?
实现这个的一个非常简单的方法就是这样
@Html.RadioButtonFor(modelItem =>item.SelectedOption, "Option1")
@Html.RadioButtonFor(modelItem =>item.SelectedOption, "Option2")
@Html.RadioButtonFor(modelItem =>item.SelectedOption, "Option3")
或者您也可以使用,
@Html.RadioButtonFor(modelItem =>item.SelectedOption, item.Option1)
@Html.RadioButtonFor(modelItem =>item.SelectedOption, item.Option2)
@Html.RadioButtonFor(modelItem =>item.SelectedOption, item.Option3)
在item.Option1 / 2/3/4中提供了值,并且它们都是不同的。