gpt4 book ai didi

javascript - JQuery onClick AJAX 事件在页面加载时触发,而不是 onClick

转载 作者:行者123 更新时间:2023-12-03 08:38:14 24 4
gpt4 key购买 nike

我需要知道下面代码中的是什么导致我的 onClick AJAX 事件在页面加载时命中服务器而不是等待在客户端单击按钮。我也愿意接受是否有更好的方法来做我想做的事情。我正在使用 ASP.NET MVC 和 KendoUI 控件。

这是我的 View 文件,其中包含代码分割

@using Kendo.Mvc.UI
@model GravanaWebUI.Models.Lessons.LessonPracticeViewModel

<script>
$(document).ready(function() {
$("#nextQuestion").hide();
$("#nextQuestion").removeClass("hidden");


});


$(document).on("click","#nextQuestion", function(e) {

var id = @Model.ActiveLessonId;
var url = '@Html.Action("GetNextPracticeQuestion", "Lesson")';
$.ajax({
type: "POST",
url: url,
data: {activeLessonId : id },
contentType: "application/json; charset=utf-8",
dataType: "json",
success: successFunc,
error: errorFunc
});
e.preventDefault();
function successFunc(data) {
alert(data);
}

function errorFunc() {
alert('error');
}
});



</script>

<style>
.k-grid .k-header {
display: none;
}

div.hidden {
display: none;
}
</style>


<hr />

<div class="row">
<div class="col-md-4 col-md-offset-5">
<p><strong>@Model.QuestionText</strong></p>
</div>
</div>
<hr />

<div class="demo-section">

@(Html.Kendo().Grid(Model.Answers)
.Name("answers")

.Columns(columns =>
{
columns.Bound(o => o.AnswerChoiceChar).Width(10);
columns.Bound(o => o.AnswerText).Width(200);
})
// .Pageable(pageable => pageable.ButtonCount(5))
.Selectable(selectable => selectable
.Mode(GridSelectionMode.Multiple))
.Navigatable()
.DataSource(dataSource => dataSource
.Ajax()
// .PageSize(5)
.Read(read => read.Action("Orders_Read", "Grid"))
)
)
</div>
<hr />
<div class="row">
<div class="col-md-4">
<button class="k-button" onclick="submit()">Submit</button>
</div>
<div class="col-md-3">
<div id="Result"></div>
</div>
<div class="col-md-3">
<button id="nextQuestion" class="k-button hidden" >Next Question</button>
</div>

</div>

<hr />
<script>
function submit() {
var grid = $('#answers').data('kendoGrid');
var selectedItem = grid.dataItem(grid.select());

if (@Model.CorrectAnswerId !== selectedItem.Id) {
$("#nextQuestion").hide();
var WrongString = "<p style='color: red'><strong>The Answer of " + selectedItem.AnswerText + " is incorrect. Please try again!</strong><p>";

$("#Result").html(WrongString);

} else {
var rightString = "<p style='color: green'><strong>The Answer of " + selectedItem.AnswerText + " is correct. Nice Work!</strong><p>";

$("#Result").html(rightString);

$("#nextQuestion").show();
}


}


</script>

这是在加载时不断受到攻击的服务器端方法

public ActionResult GetNextPracticeQuestion(int activeLessonId)
{
var viewModel = new LessonPracticeViewModel();

return PartialView("LessonPracticeQuestionPartial", viewModel);
}

任何帮助都会很棒,谢谢!

编辑

基于下面的评论,这里是包装上面 View 的 View 。

@model GravanaWebUI.Models.Lessons.LessonPracticeViewModel 
@{ ViewBag.Title = "Lesson - Practice"; }
<h2>Practice</h2>
<div id="QuestionDisplay"> @Html.Partial("LessonPracticeQuestionPartial", Model) </div>
<div class="row"> <div class="col-md-4"> @Html.ActionLink("Next", "LessonPracticeComplete", "Lesson", new {activeLessonId = Model.ActiveLessonId}, htmlAttributes: new {@class = "k-button"} )
</div> </div>

最佳答案

在对问题进行评论的帮助后,我通过注释掉代码发现了问题,并发现了 HTML 帮助程序的使用中的缺陷。

我有

@Html.Action("GetNextPracticeQuestion", "Lesson");

作为获取 Ajax 调用的 URL 的方式,但我应该使用

@Url.Action("GetNextPracticeQuestion", "Lesson");

操作调用正在进行调用,而不是 AJAX 调用。令人惊讶的是服务器端方法有一个参数,并且它由上面的操作调用填充。我认为您必须指定它,否则无论如何它都找不到该方法,但必须是 ASP.NET 管道和填充中的某些内容。

非常感谢@Sushil 为我们提供的帮助。

关于javascript - JQuery onClick AJAX 事件在页面加载时触发,而不是 onClick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33131812/

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