gpt4 book ai didi

c# - ASP.NET MVC 在 Controller 中处理动态参数数量的最佳方式

转载 作者:太空宇宙 更新时间:2023-11-03 23:45:15 28 4
gpt4 key购买 nike

我有一个用于考试的 View 模型。每个考试都有任意数量的问题。可以是 1 个问题,也可以是 50 个问题。提交后,我需要遍历问题并检查答案。我有一个解决方案,但我觉得这不是最佳做法。

int questionNumber = 1;

while (Request.Form["Question" + questionNumber.ToString()] != null)
{
int questionID = Convert.ToInt32(Request.Form["Question" + questionNumber.ToString()]);
int answerID = Convert.ToInt32(Request.Form["Answer" + questionNumber.ToString()]);

//TODO: Check if answer is correct
}

不确定另一种方法来做到这一点,比如

    [HttpPost]
[ValidateAntiForgeryToken]
public ActionResult GradeTest(int? testID, string[] questionIDs, string[] answerIDs)

我正在做的事情感觉有点老套。请帮助或让我知道我在正确的轨道上。谢谢!

最佳答案

我真的不了解整个上下文,但如果这是从表单中的 View 提交的,那么表单可能是使用 @Html.TextBoxFor 或类似的东西构建的。只需将相同的模型作为后操作的输入即可。请注意,任何不在表单字段中的属性都不会被包括在内,如果您必须拥有某些东西,请使用 HiddenFor。我在下面整理了一个示例。

YourViewModel.cs

public class YourViewModel {
public int ExamID { get; set; }
public string Name { get; set; }
public List<int> QuestionIDs { get; set; }
public List<int> AnswerIDs { get; set; }
}

YourView.cshtml

@model YourViewModel.cs
using(Html.BeginForm("PostExam", "YourController", FormMethod.Post)
{
@Html.HiddenFor(m => m.ExamID)
@Html.AntiForgeryToken()
<strong>Please enter your name</strong>
@Html.TextBoxFor(m => m.Name)
@*Your question and answers goes here*@
<input type="submit" value="Hand in" />
}

YourController.cs

public class YourController : Controller
{
[HttpPost]
[ValidateAntiForgeryToken()]
public ActionResult PostExam(YourViewModel Submitted)
{
//Handle submitted data here
foreach(var QuestionID in Submitted.QuestionIDs)
{
//Do something
}
}
}

关于c# - ASP.NET MVC 在 Controller 中处理动态参数数量的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27787532/

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