【发布时间】:2017-03-18 23:42:08
【问题描述】:
我是 MVC 世界的新手,我正在尝试通过调用控制器操作方法进行 ajax 调用以从数据库中获取 json 数据,每次我运行应用程序时,数据都会在视图上显示为原始 JSON 数据,而不是根据我的 jquery 代码渲染。你能帮我指导一下我在这里做错了什么吗?
My Controller:
[HttpGet]
[ActionName("Question")]
public ActionResult GetQuestionPost()
{
QuestionDefViewModel quesDef = new QuestionDefViewModel();
OnlineExamEntities db = new OnlineExamEntities();
quesDef.questionText = db.Questions.Where(z => z.questionId == 1000).Select(z => z.questionText).SingleOrDefault();
var query = (from p in db.Choices
where p.questionId == 1000
select new
{
choiceId = p.choiceId,
choiceText = p.choiceText,
isCorrect = p.isCorrect
}).ToList();
quesDef.Choices = query.Select(x => new Choice
{
choiceId = x.choiceId,
choiceText = x.choiceText,
isCorrect = x.isCorrect
}).ToList();
return Json(quesDef, JsonRequestBehavior.AllowGet);
}
我的观点:
@model ExamPortal.ViewModels.QuestionDefViewModel
....
<script type="text/javascript" src="~/Scripts/jquery-3.1.1.js"></script>
<script type="text/javascript" src="~/Scripts/jquery-3.1.1.min.js"></script>
<script type="text/javascript">
$(window).load(function () {
debugger;
alert("hi");
function question() {
$.ajax({
url: '/Home/Question',
type: 'Post',
cache: false,
dataType: 'json',
error: function (jqXHR, textStatus, errorThrown) {
alert(errorThrown);
},
success: function (json) {
question = json;
renderQuestion(json);
}
});
}
function renderQuestion(q) {
$('.questionText').html(q.questionText);
for (var i = 0; i < q.Choices.length; i++) {
$('.alternatives').append('<input id="alt' + q.Choices[i].Id + '" name="alternatives" type= radio"' + ' />' + q.Choices[i].Id + '. ' + q.Choices[i].Text + '<br />');
}
}
})
</script>
<div>
<h4>QuestionDefViewModel</h4>
<hr />
<div class="questionText"></div>
<div class="alternatives"></div>
</div>
</body>
</html>
我正在显示如下输出,而没有按照 jquery 函数中的描述进行渲染。
{"questionId":0,"questionText":"This is the first question","Choices":[{"choiceId":6000,"questionId":0,"choiceText":"Option A","isCorrect":"Yes ","Exams":[],"Question":null},{"choiceId":6001,"questionId":0,"choiceText":"Option B","isCorrect":"No ","Exams":[],"Question":null},{"choiceId":6002,"questionId":0,"choiceText":"Option C","isCorrect":"No ","Exams":[],"Question":null},{"choiceId":6003,"questionId":0,"choiceText":"Option D","isCorrect":"No ","Exams":[],"Question":null}]}
【问题讨论】:
-
您是否向我们展示了正确的方法(您的 ajax 调用
GetQuestion()但那不是您展示的方法)? -
你在哪里称
question()函数? -
我的意图是在页面加载时加载 question() 函数
-
@stephen Muecke 抱歉,我更新了帖子。 ajax 函数调用 question() 函数。
-
几件事 - 删除 jQuery 的脚本标签之一。目前您正在加载未缩小版和缩小版,您只需要一个。其次,您在 ajax 调用中指定了 POST 请求,但您的操作只允许 GET,因此据我所知,它根本不应该工作。
标签: jquery asp.net asp.net-mvc razor