抱歉,我知道这可能是一个重复的问题。 我已经创建了这些信息但实际上并不知道如何做到这一点。
我想将数组从视图传递给控制器。以下是代码
@using (Html.BeginForm("FinishExam", "Exams"))
{
@Html.AntiForgeryToken()
List<int> answerArray = new List<int>();
for (var i = 0; i <= examMulQuestion.Count - 1; i = i + 3)
{
int questionId = examMulQuestion[i].questionId;
<h4> @questionNo . @examMulQuestion[i].questionContent</h4>
questionNo++;
<li style="">
<input type="radio" name="answerArray[@answerNo]" value="@examMulQuestion[i].answerId"> @examMulQuestion[i].answerContent <br />
<input type="radio" name="answerArray[@answerNo]" value="@examMulQuestion[i + 1].answerId"> @examMulQuestion[i + 1].answerContent <br />
<input type="radio" name="answerArray[@answerNo]" value="@examMulQuestion[i + 2].answerId"> @examMulQuestion[i + 2].answerContent
</li>
answerNo++;
<br /><br />
}
}
<input id="submitButton" type="submit" value="submit" class="btn btn-default">
我使用answerArray[@answerNo]
作为数组,例如answerArray[0]
,answerArray[1]
等,我不知道如何将数组传递给控制器,因为当按钮提交时controller显示数组为null
public ActionResult FinishExam(List<int> answerArray) (shows null)
{
return View();
}
我尝试使用ajax,但我是初学者,不知道该怎么做。
function submit() {
$.ajax({
url: ('/Exams/FinishExam'),
type: 'POST',
data: answerArray,
dataType: 'JSON'
});
}
你会告诉我的方式吗?十分感谢!!
答案 0 :(得分:0)
我认为这会满足你的条件。请检查一下。
var id=new Array();
$.each($(".listCheckBox"), function(i){
if($(this).prop('checked')==true){
var splitid = $(this).val();
var splittedid = splitid.split('~-1~-1`');
id.push(splittedid[0]);
}
});
答案 1 :(得分:0)
问题是answerArray
只能在服务器的后端代码中访问。您无法从JavaScript访问它。如果您使用调试器(Chrome调试器或其他Web调试器),您会注意到未定义answerArray
。这是您实现所需目标的一种方式。在您的视图中添加以下代码:
<script>
var answerArray =
@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(answerArray));
</script>
现在它将序列化c#变量answerArray
并将其分配给名为answerArray
的JavaScript变量。然后,您可以在JavaScript中使用它。
答案 2 :(得分:0)
这是我的建议。
首先为此页面视图创建模型或视图模型:
public class ExamModel
{
public virtual string questionContent { get; set; }
public virtual int questionId { get; set; }
public virtual int answerId { get; set; }
public virtual string answerContent { get; set; }
}
然后在渲染视图之前填充它:
public ActionResult Index()
{
IList<ExamModel> lstModel = new List<ExamModel>();
lstModel.Add(new ExamModel()
{
questionContent = "Test Question1",
questionId = 1,
answerId = 101,
answerContent = "Answer Test101"
});
lstModel.Add(new ExamModel()
{
questionContent = "Test Question2",
questionId = 2,
answerId = 102,
answerContent = "Answer Test102"
});
return View(lstModel);
}
使用以下方法将其传递到剃须刀视图:
@model IList<SPiGlobal.PR.Web.Models.ExamModel>
然后在你的for循环中:
@using (Html.BeginForm("FinishExam", "SO"))
{
@Html.AntiForgeryToken()
for (var i = 0; i <= Model.Count - 1; i++){
<div class="editor-label">
@Model[i].questionContent
</div>
<div class="editor-field">
@Html.RadioButtonFor(model => model[i].answerId, Model[i].answerId, true) @examMulQuestion[i].answerContent
</div>
}
<input id="submitButton" type="submit" value="submit" class="btn btn-default">
}
注意确保你的提交按钮在你的BeginForm中,因为当它在BeginForm之外时它对我不起作用:
<input id="submitButton" type="submit" value="submit" class="btn btn-default">
这只是一个建议,这是PostBack的截图: