我已經與ASP.net C#MVC框架玩弄試圖編程某種評估測試的。我是相當新的ASP.net(C#中相當流暢),但是,我不斷收到同樣怪異的結果:C#MVC應用程序不需要重定向
確定。它的工作原理基本上是帶有一些答案的問題出現 - >用戶必須選擇他/她認爲正確的答案,然後單擊繼續(Button'Next')。那麼,我所做的是從一個xml文件中讀取所有問題/答案和其他信息(毫無疑問,我可以在調試器中看到正確的信息)。不過我所知道想要做的就是完成約18個問題,將用戶重定向到某種結果頁面
public ActionResult Result()
{
ViewBag.Message = "Your result page.";
return View(_questionProcessing);
}
的是換貨時,所有的問題都回答(從問題的方法調用)被調用後。 但是,由於某種原因,它已經跳到第四個問題之後的結果頁面。
現在我已經調試了好幾個小時的應用程序,但一直沒能找到原因。
如果有人能請大家幫忙,非常感謝你!
問題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時,我都會緊張。 –