Я играю с ASP.net C# MVC Framework, пытающейся запрограммировать какой-либо тест оценки. Я довольно новичок в ASP.net (довольно свободно владею C#), однако я постоянно получаю тот же странный результат:C# MVC-приложение нежелательное перенаправление
Ok. Как это работает, в основном, возникает вопрос с некоторыми ответами -> пользователь должен выбрать ответ, который он считает правильным, и нажать «Продолжить» (кнопка «Далее»). Ну, что я делаю, я читаю все вопросы/ответы и другую информацию из XML-файла (правильно работает, без сомнения, я могу видеть в отладчике правильную информацию). Однако то, что я знаю, хочу сделать это после завершения около 18 вопросов, чтобы перенаправить пользователя на какой-то странице результатов
public ActionResult Result()
{
ViewBag.Message = "Your result page.";
return View(_questionProcessing);
}
который Мента быть вызван, когда все вопросы отвечает (вызов метода из Question). Однако по какой-то причине он уже перескакивает на страницу результатов после четвертого вопроса.
Я отлаживал приложение в течение нескольких часов, но не смог найти причину.
Если кто-то может помочь, спасибо вам большое!
Вопрос cshtml
@using Assessify.Models
@model Assessify.Models.QuestionProcessing
@{
ViewBag.Title = "Question";
<link href="@Url.Content("~/Content/Question.css")" rel="stylesheet" type="text/css"/>
}
<div class="container outerQuestionContainer">
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 well">
<h2>Question @((Model.questionIterator + 1).ToString())</h2>
</div>
</div>
<div class="row">
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="imageToQuestion">
<img src="@Model.QuestionModels.Questions[Model.questionIterator].Bildurl" class="img-rounded img-responsive" alt="myImagetitle" id="questionImage"/>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="well cFragesatz">
@Html.Label("Expression", Model.QuestionModels.Questions[Model.questionIterator].Fragesatz)
</div>
<div class="divAntworten">
<div class="divAntwort" style="color: white">
@foreach (Antwort antwort in Model.QuestionModels.Questions[Model.questionIterator].Antworten)
{
<div class="well divAntwortStyle">
@Html.CheckBox(antwort.Antwortphrase, false)
@Html.Label(antwort.Antwortphrase)
</div>
}
</div>
</div>
</div>
<div class="row rowButton">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
@{
Model.questionIterator = Model.questionIterator + 1;
}
<button type="button" class="btn btn-info" style="width: 100%"> @Html.ActionLink("Next", "Question", "Home", new {counter = Model.questionIterator}, null)</button>
</div>
</div>
</div>
</div>
</div>
Данные:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Xml.Linq;
namespace Assessify.Models
{
public class QuestionModels
{
public List<Question> Questions { get; set; }
public QuestionModels(String Path)
{
var xdox = XElement.Load(Path);
var e = from c in xdox.Descendants("Frage")
select new Question()
{
FrageId = int.Parse((string) c.Attribute("fNumb").Value),
Category = (string)c.Attribute("fCategory").Value,
Fragesatz = (string)c.Element("Fragesatz").Value,
Bildurl = (string)c.Element("Bildurl").Value,
Antworten = from a in c.Elements("Antwort")
select new Antwort()
{
Antwortphrase = a.Value,
isTheCorrect = Boolean.Parse((string) a.Attribute("isTrue").Value)
}
};
Questions = e.ToList();
}
}
public class Question
{
public String Fragesatz { get; set; }
public IEnumerable<Antwort> Antworten { get; set; }
public int FrageId { get; set; }
public String Bildurl { get; set; }
public String Category { get; set; }
public Boolean wasAnsweredCorrectly = false;
public Decimal Weight { get; set; }
}
public class Antwort
{
public String Antwortphrase { get; set; }
public Boolean isTheCorrect { get; set; }
}
}
и
namespace Assessify.Models
{
public class QuestionProcessing
{
public QuestionModels QuestionModels { get; set; }
public int questionIterator { get; set; }
public QuestionProcessing(String link)
{
QuestionModels = new QuestionModels(link);
questionIterator = 0;
}
}
HomeController:
namespace Assessify.Controllers
{
public class HomeController : Controller
{
QuestionProcessing _questionProcessing = new QuestionProcessing(@"C:\Users\thoma\Documents\Visual Studio 2015\Projects\Assessify\Assessify\Models\Ressources\Fragefile_new.xml");
public ActionResult Index()
{
return View();
}
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
public ActionResult Question(int counter = 0)
{
ViewBag.Message = "Your question page.";
this._questionProcessing.questionIterator = counter;
if (_questionProcessing.questionIterator >= _questionProcessing.QuestionModels.Questions.Count)
{
return RedirectToActionPermanent("Result");
}
return View(this._questionProcessing);
}
public ActionResult Result()
{
ViewBag.Message = "Your result page.";
return View(_questionProcessing);
}
}
}
RouteConfig:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace Assessify
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Question",
url: "Home/Question/{counter}",
defaults: new { controller = "Home", action = "Question", counter = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
}
Когда вы отлаживаете 4-й вопрос, что такое значение «_questionProcessing.QuestionModels.Questions.Count»? –
FWIW, контроллеры создаются и уничтожаются с каждым запросом. В результате вы должны помнить, что ваш экземпляр 'QuestionProcessing' будет новым для каждого запроса. Возможно, вы уже знаете об этом, но я нервничаю, когда вижу, как люди вручную устанавливают ивары на контроллерах. –