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