C# MVC4评分系统
很抱歉,我对MVC4很陌生。 我正在建立一个mvc4评级系统 首先,我创建了一个视图来输入评级问题字段,并将信息存储到评级数据库中,如下所示:C# MVC4评分系统,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,很抱歉,我对MVC4很陌生。 我正在建立一个mvc4评级系统 首先,我创建了一个视图来输入评级问题字段,并将信息存储到评级数据库中,如下所示: Rating Question Input ============================== Question : [ What Fruit You Like? ] Sub Question : Apple ; Orange ; Grapes Number of Radio Button : [3] Rating Header : Hate
Rating Question Input
==============================
Question : [ What Fruit You Like? ]
Sub Question : Apple ; Orange ; Grapes
Number of Radio Button : [3]
Rating Header : Hate ; Like ; Very Like
1. What Fruit You Like ?
Hate Like Very Like
Apple [] [] []
Orange [] [] []
Grapes [] [] []
My Ratingdb字段:
public class RatingInput
{
public int Id { get; set; }
public int QuestionId { get; set; }
public string Question { get; set; }
public string Subquestion { get; set; }
public int NumberRadioButton { get; set; }
public string ratingheader { get; set; }
}
数据库中的数据是什么样子的:
Question | Subquestion | NumberRadioButton | ratingheader
What Fruit you Like? | Apple;Orange;Grapes | 3 | Hate;Like;Very Like
如何在表格中为问题和单选按钮生成单独的行?
输出如下所示:
Rating Question Input
==============================
Question : [ What Fruit You Like? ]
Sub Question : Apple ; Orange ; Grapes
Number of Radio Button : [3]
Rating Header : Hate ; Like ; Very Like
1. What Fruit You Like ?
Hate Like Very Like
Apple [] [] []
Orange [] [] []
Grapes [] [] []
我的评级输出页面代码示例:
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Question)
</td>
<td>
@Html.DisplayFor(modelItem => item.SubQuestion) *Need Help
</td>
<td>
@Html.DisplayFor(modelItem => item.NumberRadioButton) *Need Help
</td>
<td>
@Html.DisplayFor(modelItem => item.ratingheader) *Need Help
</td>
</tr>
}
@foreach(模型中的变量项)
{
@DisplayFor(modelItem=>item.Question)
@Html.DisplayFor(modelItem=>item.SubQuestion)*需要帮助吗
@DisplayFor(modelItem=>item.NumberRadioButton)*需要帮助吗
@DisplayFor(modelItem=>item.ratingheader)*需要帮助吗
}
您将需要创建视图模型来表示您要显示/编辑的内容,可能看起来像
public class SubQuestionVM
{
public int ID { get; set; }
public string Text { get; set; }
public string Rating { get; set; }
}
public class QuestionVM
{
public int ID { get; set; }
public string Text { get; set; }
public List<SubQuestionVM> SubQuestions { get; set; }
}
在我看来
@model List<yourAssembly.QuestionVM>
@using (Html.BeginForm())
{
for(int i = 0; i < Model.Count; i++)
{
@Html.HiddenFor(m => m[i].ID)
@Html.DisplayFor(m => m[i].Text)
for(int j = 0; j < Model[i].SubQuestions.Count; j++)
{
@Html.HiddenFor(m => m[i].SubQuestions[j].ID)
@Html.DisplayFor(m => m[i].SubQuestions[j].Text)
var id = string.Format("Hate-{0}", Model[i].SubQuestions[j].ID);
@Html.RadioButtonFor(m => m[i].SubQuestions[j].Rating, "Hate", new { id = id })
<label for="@id">Hate</label>
id = string.Format("Like-{0}", Model[i].SubQuestions[j].ID);
@Html.RadioButtonFor(m => m[i].SubQuestions[j].Rating, "Like", new { id = id })
<label for="@id">Like</label>
// ditto for 'Very Like'
}
}
<input type="submit" />
}
@型号列表
@使用(Html.BeginForm())
{
for(int i=0;im[i].ID)
@DisplayFor(m=>m[i].Text)
对于(int j=0;jm[i].子问题[j].ID)
@Html.DisplayFor(m=>m[i]。子问题[j]。文本)
var id=string.Format(“Hate-{0}”,模型[i]。子问题[j].id);
@RadioButton(m=>m[i]。子问题[j]。评分,“仇恨”,新的{id=id})
憎恨
id=string.Format(“Like-{0}”,模型[i]。子问题[j].id);
@RadioButton(m=>m[i]。子问题[j]。评分,“Like”,新的{id=id})
喜欢
//“非常相似”也是如此
}
}
}
并发回
public ActionResult Edit(List<QuestionVM> model)
public ActionResult编辑(列表模型)
注意:我在这里展示的只是基于您在问题中所包含内容的基础知识。您可能应该进行
评分
和枚举和/或添加[必需]
验证属性,以确保为每个子问题选择评分 你想要每个水果有3个单选按钮吗?嗨,Stephen,没错。然后你需要创建一个视图模型,其中包含渲染视图所需的属性。我会在一小时内添加一个答案,stephen,有可能通过检测半列来生成子问题的新行吗?我正在尝试循环生成单选按钮,几乎可以工作了。。但不知道子问题。我刚看过你的编辑。您的数据库结构毫无意义,也不表示关系数据。应删除NumberRadioButton
和ratingheader
字段,并且您需要一个单独的子问题表,其中包含QuestionID
字段,该字段是QuestionTable
的外键(该字段应仅包含有关问题的信息(其ID、文本等)您好,Stephen,非常感谢您的回答。将作为参考。无论如何,我需要从数据库中检索子问题和单选按钮的编号,并将其显示给用户以选择评分。子问题和单选按钮的编号由问题创建者决定。谢谢,我将重试。:)单选按钮的数量是什么意思?这毫无意义。您的子问题表将包含字段ID int
(PK)、question int
(FK到问题表)、Text varchar
和Rating varchar
。根据选择的单选按钮,评级字段将包含“恨”、“喜欢”或“非常喜欢”的值。谢谢Stephen,我明白你的意思了。我通过引用您的代码得到一个错误:“传入字典的模型项的类型为'System.Collections.Generic.List'1[RatingSystem.Models.Question]”,但此字典需要'RatingSystem.Models.Question'类型的模型项。“有什么提示吗?那么您没有正确复制我的代码-视图的第一行是@model List
(列表不是一个单独的对象)。很明显,您已经使它@model yoursassembly.QuestionVM
无法分辨,因为您没有显示POST方法,但它需要公共操作结果编辑(列表模型)
,然后您可以循环查看模型中的项目,初始化新实例或数据模型(或从数据库中获取现有的),更新其属性,然后保存(您需要保存数据模型,而不是视图模型,假设它们不是同一类型)。我们在这里有点偏离正轨,因此如果您有进一步的问题,您应该发布一个新问题,显示实际代码并解释问题