【发布时间】:2016-05-27 06:12:05
【问题描述】:
我创建了一个调查。对于整个调查,我只有视图和每个问题的部分视图。我也有分页。所有这些都显示在下图中。
现在人们可以使用GetAnswersMulti 方法将表单(整个问题)发布到服务器。 (我需要异步发布表单)。我想添加一个功能 - 当人们看到最后一个未回答的问题时 - 按钮从 Answer 变为 Answer and exit。我想通过删除一个按钮并添加另一个带有特定 URL 的按钮来做到这一点。问题是 - 服务器应该检查这个问题是否是最后一个问题。
我尝试异步调用控制器中的相应方法并获取返回值。
我从 SO 中尝试了很多,这就是我的结论:
查看
<script>
function isLast(data) {
$.ajax({
type: "POST",
url: "@Url.Action("Survey", "IsLastQuestion")",
data: { idQuestion: data },
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
alert("success");
if (msg == "True") {
$(".submitbutton").remove();
}
},
error: function (e) {
alert("Fail");
}
});
}
</script>
@using (Html.BeginForm("GetAnswersMulti", "Survey", FormMethod.Post))
{
<input value="Ответить" type="submit"
class="btn btn-default submitbutton"
onclick="isLast(@Model.FirstOrDefault().IdQuestion);" />
}
控制器
[HttpPost]
public ActionResult IsLastQuestion(int idQuestion)
{
Question question = Manager.GetQuestion(idQuestion);
List<Question> questions = Manager.SelectQuestions(question.idAnketa);
if (questions.Count == Manager.GetCountQuestionsAnswered(question.idAnketa, SessionUser.PersonID))
return new JsonResult() { Data = true };
else
return new JsonResult() { Data = false };
}
[HttpPost]
public void GetAnswersMulti(List<PossibleAnswerVM> possibleAnswers)
{
List<Answer> answers = new List<Answer>();
foreach (PossibleAnswerVM possibleAnswer in possibleAnswers)
{
Answer answer = new Answer();
answer.datetimeAnswer = DateTime.Now;
answer.idOption = possibleAnswer.IdOption;
answer.idPerson = SessionUser.PersonID;
if (possibleAnswer.IsChecked)
{
if (IsValid(answer))
answers.Add(answer);
}
}
Manager.SaveAnswers(answers,possibleAnswers.FirstOrDefault().IdQuestion, SessionUser.PersonID);
}
现在调用控制器中的方法并传递 idQuestion。控制器中的方法返回 true(当它是最后一个问题时)。然后我在js代码中失败了。 请帮帮我。我通过 SO 搜索了 2 天,但没有找到任何适合我的东西。
【问题讨论】:
-
你想做什么?你为什么将
Ajax.BeginForm()和 jquery ajax 结合起来?你$.ajax调用IsLastQuestionController中的Survey方法(你有错误的参数),它甚至没有传递idQuestion的值你在SurveyController中的GetAnswersMulti()方法是什么? -
@StephenMuecke 抱歉,我编辑了答案,现在将参数传递给函数。我试图在控制器方法(由提交调用)中做所有事情,但也无法应对。我问了here 的问题,人们建议我按照我的理解遵循这种方法。
-
你没有通过任何东西 - 你所拥有的只是
data: "{}",我从来没有见过你链接的那个问题,更不用说给你任何建议了。无法理解您在这里尝试做什么。 (而您现在编辑调用了一个甚至不存在的isLast2()函数) -
@StephenMuecke 他们通过发送指向另一个问题的链接来提供建议。我需要通过 ajax 发布表单,同时检查这个问题是否是最后一个问题。如果是这样 - 删除按钮。
-
@VitaliiIsaenko,您没有在问题中解释任何内容。很抱歉,您的问题中的几乎每一行代码都有错误,没有任何可能工作。如果你没有清楚地解释这个观点是为了什么,你想要达到什么目的,那么没有人能给你正确的答案。
标签: c# jquery ajax asp.net-mvc controller