저는 일종의 평가 테스트를 프로그래밍하려고 시도한 ASP.net C# MVC 프레임 워크를 가지고 놀았습니다. 나는 ASP.net에 상당히 익숙하다. (C#에 능통하다.) 그러나 나는 계속해서 이상한 결과를 얻고있다 :C# MVC 응용 프로그램 원치 않는 리디렉션
Ok. 작동 원리는 기본적으로 일부 답변이있는 질문이 나타납니다.> 사용자가 답을 올바르게 선택하고 진행을 클릭해야합니다 ('다음'버튼). 글쎄, 내가 할 일은 XML 파일에서 모든 질문/답변 및 기타 정보를 읽는 것입니다 (올바로 디버거에서 정확한 정보를 볼 수 있다는 점에 대해서는 의심의 여지가 없습니다). 그러나 내가하고 싶은 알고있는 모든 질문 (질문 방법에서 호출) 응답 할 때 호출 될, 표준은 결과 페이지
public ActionResult Result()
{
ViewBag.Message = "Your result page.";
return View(_questionProcessing);
}
의 일종으로 사용자를 리디렉션 약 18 질문을 완료 한 후입니다. 그러나 어떤 이유로 4 번째 질문 이후에 결과 페이지로 이동합니다.
지금 몇 시간 동안 응용 프로그램을 디버깅했지만 원인을 찾을 수 없었습니다.
누군가가 도와 주시면 감사하겠습니다.
[질문 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 }
);
}
}
}
네 번째 질문에서 디버깅 할 때 "_questionProcessing.QuestionModels.Questions.Count"값은 무엇입니까? –
FWIW, 컨트롤러는 각 요청마다 인스턴스화되고 파괴됩니다. 결과적으로, 당신은'QuestionProcessing' 인스턴스가 각 요청마다 새로 추가된다는 것을 명심해야합니다. 당신은 이미 그것을 알고 있을지 모르지만 사람들이 컨트롤러에 ivars를 수동으로 설정하는 것을 볼 때마다 나는 긴장합니다. –