Я не хотел слишком усложнять вопрос, но здесь идет ... У меня есть набор вопросов и ответов. Я хочу использовать C # ASP.NET Core MVC, чтобы получить вопрос из файла, отформатировать в формате JSON, вернуть значение вопроса на веб-страницу с помощью AJAX. Вопрос отображается при нажатии кнопки, которая запускает метод C #, путем подключения к нему с помощью оператора Route []. Затем, также в AJAX на той же веб-странице, пользователь может отправить свой ответ. Если они верны, это скажет им. Это работает, если не указан случайный номер. Случайное число просто выбирает строку текстового файла, содержащего вопросы - вот и все! Однако подвох-22 заключается в том, что когда пользователь нажимает кнопку «ОТВЕТ» для отправки своего ответа, он повторно запускает метод C #, который генерирует новое случайное число, поэтому имеет хороший шанс выбрать другую строку изфайл, следовательно, содержит другой ответ, а затем он сообщает пользователю, что он ошибся, даже если они были правильными ... Код на веб-странице:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () { //When document loads, function is ready (this includes ALL of the functions below!)
$('#showQ').click(function () {
//Block of code that uses AJAX to DISPLAY questions from Controllers/DemoController.cs/answerQuestion()
$.ajax(
{ //Start of the actual AJAX request code...
type: 'GET', //Use GET method to send values
url: '/demo/answerQuestion/',//The location of the method (Controllers/DemoController.cs/answerQuestion)
success: function (result) { //If function is successful, it will display the result
$('#displayQ').html(result); //If the code above is successful, it will display the question inside id="displayQ"
}
}
)
});
//Block of code that uses AJAX to ANSWER questions from Controllers/DemoController.cs/answerQuestion()
$('#answerQ').click(function () { //When answerQ button is clicked, run this function...
var answer = $('#answer').val(); //var answer = id="answer" field value when answerQ submit button is pressed
$.ajax(
{ //Start of the actual AJAX request code...
type: 'GET', //Use GET method to send values
url: '/demo/answerQuestion/' + answer, //Submit answer value to answerQuestion
success: function (result) {
$('#displayAns').html(result); //If the code above is successful, it will send the answer and display result in id="displayAns"
}
}
)
});
}); //End of $(document).ready(function...
</script>
</head>
<body>
<fieldset>
<legend>Question...</legend>
<br />
<input type="button" value="Click for question" id="showQ" />
<br />
<span id="displayQ"></span>
<br />
Answer: <input type="text" id="answer" />
<br />
<input type="button" value="Click to submit answer" id="answerQ" />
<br />
<span id="displayAns"></span>
<br />
</fieldset>
</body>
</html>
Методы C #, которые выбирают значения изAJAX ...
[Route("answerQuestion")]
[Route("answerQuestion/{answer}")]
public IActionResult AnswerQuestion(string answer)
{
//Need to think of a way to get this to only run when "Next question" button is clicked and not when answer provided!
//Problem is, if I make it so it only runs if "answer" is not set, then it complains that variable is undefined!
//It's a bit of a catch-22!!!
Random rnd = new Random();
int randomNumber = rnd.Next(0, 10);
string path = @"C:\Users\aposi\Desktop\csharpweb\HOWMVCWORKS\quizquestions.txt";
if (System.IO.File.Exists(path))
{
string[] allLines = System.IO.File.ReadAllLines(path);
string randomLine = allLines[randomNumber];
string removedSlashN = randomLine.Replace("\n", "");
string removedWhitespace = removedSlashN.Replace(" ", "");
string[] separatedout = removedWhitespace.Split("|"); //Has to be string array data-type to work with Split() function
string songname = separatedout[0];
char songletter = songname[0];
string artist = separatedout[1];
if (string.IsNullOrEmpty(answer))
{
return new JsonResult("Artist: " + artist + "First letter of songname: " + songletter);
}
else if (answer == songname)
{
return new JsonResult("Well done! You guessed correctly that the song name is: " + songname);
}
else if (answer != songname)
{
return new JsonResult("Sorry! You got it wrong! The song name was... " + songname);
}
else
{
return new JsonResult("Something went wrong!!!");
}
}
else
{
return new JsonResult("No question file found!");
}
}
}
}