C# MVC应用程序不需要的重定向

C# MVC应用程序不需要的重定向,c#,asp.net-mvc,C#,Asp.net Mvc,我一直在玩ASP.NETMVC框架,试图编写某种评估测试。我对ASP.net相当陌生,C语言相当流利,但我经常得到同样奇怪的结果: 嗯。其工作原理基本上是出现一个带有一些答案的问题->用户必须选择他/她认为正确的答案,然后单击“继续”按钮“下一步”。我所做的是从一个xml文件中读取所有问题/答案和其他信息,这些信息工作正常,毫无疑问,我可以在调试器中看到正确的信息。然而,我知道我想做的是在完成大约18个问题后,将用户重定向到某种结果页面 public ActionResult Result()

我一直在玩ASP.NETMVC框架,试图编写某种评估测试。我对ASP.net相当陌生,C语言相当流利,但我经常得到同样奇怪的结果:

嗯。其工作原理基本上是出现一个带有一些答案的问题->用户必须选择他/她认为正确的答案,然后单击“继续”按钮“下一步”。我所做的是从一个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>
家庭控制器:

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);
        }



    }
}
路线图:

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 }
            );
        }
    }
}
您可能不希望这样:

RedirectToActionPermanent("Result");
这将使用HTTP响应代码响应浏览器,该代码指示它刚刚请求的资源将始终导致重定向,并且它应该只请求重定向的资源,而不是自己请求重定向的资源

但那不是你想要的。您希望浏览器继续请求问题资源,直到您明确告诉它执行重定向,这将执行以下操作:

RedirectToAction("Result");
这将使用HTTP响应代码进行响应,该代码告诉浏览器这次重定向用户,但不一定在将来的请求中重定向

基本上,如果您在测试期间发出了导致重定向的请求,那么将来来自该浏览器的所有请求都可以直接转到重定向页面,而无需向服务器提交请求

注意:此时您可能需要清除浏览器中的客户端数据以消除该影响,因为您已经告诉浏览器永久重定向。

您可能不希望这样:

RedirectToActionPermanent("Result");
这将使用HTTP响应代码响应浏览器,该代码指示它刚刚请求的资源将始终导致重定向,并且它应该只请求重定向的资源,而不是自己请求重定向的资源

但那不是你想要的。您希望浏览器继续请求问题资源,直到您明确告诉它执行重定向,这将执行以下操作:

RedirectToAction("Result");
这将使用HTTP响应代码进行响应,该代码告诉浏览器这次重定向用户,但不一定在将来的请求中重定向

基本上,如果您在测试期间发出了导致重定向的请求,那么将来来自该浏览器的所有请求都可以直接转到重定向页面,而无需向服务器提交请求


注意:此时您可能需要清除浏览器中的客户端数据以消除该影响,因为您已经告诉浏览器永久重定向。

FWIW,每个请求都会实例化和销毁控制器。因此,您应该记住,对于每个请求,您的QuestionProcessing实例也是新的。你可能已经意识到了这一点,但每当我看到有人在控制器上手动设置IVAR时,我都会感到紧张。FWIW,每个请求都会实例化并销毁控制器。因此,您应该记住,对于每个请求,您的QuestionProcessing实例也是新的。你可能已经意识到了这一点,但每当我看到人们在控制器上手动设置IVAR时,我就会感到紧张。