gpt4 book ai didi

asp.net-mvc - 编辑器模板中的单选按钮

转载 作者:行者123 更新时间:2023-12-01 13:52:23 24 4
gpt4 key购买 nike

我正在创建一个包含问题列表和多项选择答案的“进度报告”。如果相关,这些问题将通过一个单独的无关流程自动填充到进度报告中。

代码如下:编辑 View :

@model App.Models.ProgressReport
@Html.EditorFor(model => model.ReportAnswers)

ReportAnswer.cshtml EditorTemplate(显示进度报告中的问题和答案):

@model App.Models.ReportAnswer    
<h3>
Question
</h3>

<p>
@Html.DisplayFor(x => x.Question.QuestionText)
</p>
<p>
@Html.EditorFor(x => x.Question.PossibleAnswers)
</p>
<p>
@Html.LabelFor(x => x.AnswerID)
@Html.TextBoxFor(x => x.AnswerID)
</p>

PossibleAnswer.cshtml(显示问题所有可用答案的编辑器模板):

@model App.Models.PossibleAnswer

<p>
@Html.DisplayFor(x => x.AnswerText)
@Html.RadioButtonFor(x => x.AnswerText, Model.AnswerID, new { Name =Model.QuestionID })
</p>

因此,这会显示进度报告中的所有相关问题和可选答案。

我的问题:

1.) 是不是每个单选按钮都有不同的名称,这样我就可以为单个问题选择所有答案,而不是在选择下一个问题时取消选择一个。

2.) 所选答案应在我下次编辑进度报告时加载。如何根据上次加载 View 时提供的答案在加载时预先选择其中一个答案。

3.) 如何将选定的答案返回到我的 ProgressReport Controller 中的编辑操作?

非常感谢您的帮助

编辑 Controller 代码:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "ReportID,ClientID,ReportDateSubmitted,ReportWeek")] ProgressReport progressReport)
{
if (ModelState.IsValid)
{
db.Entry(progressReport).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ClientID = new SelectList(db.Clients, "ClientID", "ID", progressReport.ClientID);
return View(progressReport);
}

最佳答案

您的问题是对 PossibleAnswer 类型使用 EditorTemplateEditorFor() 方法旨在处理集合并向属性添加前缀和索引器,以便它可以在回发时通过 DefaultModelBinder 绑定(bind)到集合.第二个问题是您将单选按钮绑定(bind)到 PossibleAnswer 的属性 AnswerText,而您应该绑定(bind)到 ReportAnswer 的 AnswerID 属性

删除PossibleAnswer.cshtml文件,修改ReportAnswer.cshtml

@model App.Models.ReportAnswer    
<h3>Question</h3>
<p>@Html.DisplayFor(x => x.Question.QuestionText)</p>
@foreach(var answer in Model.Question.PossibleAnswers)
{
var id = string.Format("answer-{0}", answer.AnswerID);
<p>
@Html.RadioButtonFor(m => m.AnswerID, answer.AnswerID, new { id = id })
<label for="@id">@answer.AnswerText</label>
</p>
}

这将生成如下所示的 html

<input type="radio" id="answer-1" name="[0].AnswerID" value="1" />
<label for="answer-1">Answer 1</label>
<input type="radio" id="answer-2" name="[0].AnswerID" value="2" />
<label for="answer-2">Answer 2</label>

旁注:从不尝试覆盖 name 属性(如您对 new { Name = Model.QuestionID } 的使用。有没有更可靠的方法来保证模型绑定(bind)会失败 :)

关于asp.net-mvc - 编辑器模板中的单选按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30737077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com