如何在asp.net.mvc中跟踪事物?

时间:2015-11-29 16:06:54

标签: asp.net-mvc

我正在开发一个小型Web应用程序,我需要帮助跟踪状态。

此应用程序以随机​​方式(一次一个)向用户提出几个问题。但是,要做到这一点,我需要知道哪个问题已经得到解答(所以我不重复任何问题)以及用户是否做对了。

我需要知道用户是否得到了最后一个问题,因为如果他出错了,应用程序会从不同的列表中提出一个随机问题。

为此,我创建了这个类" state"在控制器中应该跟踪事物。

    public class state
    {
        public string via { get; set; }

        public string previousQuestionList { get; set; }
        public string currentQuestionList { get; set; }

        public string leftButton { get; set; }
        public string rightButton { get; set; }

        public List<Question> previousQuestions { get; set; }
        public Question currentQuestion { get; set; }

        public bool lastAnswer { get; set; }
    }

因此,当用户第一次进入页面时,控制器会向视图发送默认信息并构建页面。

    public ActionResult Index()
    {
        state currentState = new state();
        currentState.currentQuestion = new Question();
        currentState.currentQuestion.description = "Qual a via do seu cartão?";
        currentState.currentQuestion.aplicabilidade = true;
        currentState.leftButton = "1a Via";
        currentState.rightButton = "2a Via";
        return View(currentState);
    }

视图如下:

View

html代码是这样的:

@{
    ViewBag.Title = "Sistema de Script de Desbloqueio";
}

@model Sistema_de_Script_de_Desbloqueio.Controllers.HomeController.state


<div class="jumbotron">
    <h1>@Model.currentQuestion.description</h1>
</div>

<form name="Formulário" action="~/Views/Home/Index.cshtml" method="post">

    @if (Model.currentQuestion.aplicabilidade == true)
    {
        <div class="row">
            <div class="col-md-6">
                    <div class="btn btn-primary btn-group-justified" role="group"><h2>@Model.leftButton</h2></div>          
            </div>

            <div class="col-md-6">
                <div class="btn btn-warning btn-group-justified" role="group"><h2>@Model.rightButton</h2></div>
            </div>
        </div>
    }
    else
    {
        <div class="row">
            <div class="col-md-4">
                <div class="btn btn-primary btn-group-justified" role="group"><h2>@Model.leftButton</h2></div>
            </div>

            <div class="col-md-4">
                <div class="btn btn-warning btn-group-justified" role="group"><h2>@Model.rightButton</h2></div>
            </div>

            <div class="col-md-4">
                <div class="btn btn-default btn-group-justified" role="group"><h2>N/A</h2></div>
            </div>
        </div>
    }
</form>

我的想法是用户按下其中一个按钮并发送课程对象&#34;状态&#34; (型号)返回按下按钮的信息到控制器。

有可能吗?

2 个答案:

答案 0 :(得分:1)

我使用了&#34; elolos&#34;并使用&#34; Session&#34;保持约会并且工作得很好。

    [HttpPost]
    public ActionResult Index(string lastButton)
    {
        state currentState = Session["currentState"] as state;

        //Some code here

        return View(currentState);
    }

然后在&#34; Post&#34;方法我从&#34; currentState&#34;

中检索了信息
g.translate(camera.x-(width/2),camera.y-(height/2);

谢谢。

答案 1 :(得分:0)

最简单的方法是从您正在创建的视图中执行简单的PostbackAJAX POST

添加最后一个按钮的属性,点击模型:

public string LastClickedButton { get; set; }

然后将ActionResult添加到POST:

public ActionResult IndexPost(state postedState)
{
      //Do stuff.
}

从视图执行POST:

@{
    ViewBag.Title = "Sistema de Script de Desbloqueio";
}

@model Sistema_de_Script_de_Desbloqueio.Controllers.HomeController.state


<div class="jumbotron">
    <h1>@Model.currentQuestion.description</h1>
</div>

<form name="Formulário" action="~/Views/Home/Index.cshtml" method="post">

    @if (Model.currentQuestion.aplicabilidade == true)
    {
        <div class="row">
        @using (@Html.BeginForm("IndexPost", "Home"))
        {
            <div class="col-md-6">
                <div class="btn btn-primary btn-group-justified" role="group"><h2>@Model.leftButton</h2></div>
            </div>
            @Html.Hidden("LastClickedButton", @Model.leftButton);
        }
        @using (@Html.BeginForm("IndexPost", "Home"))
        {
            <div class="col-md-6">
                <button class="btn btn-warning btn-group-justified" role="group" type="submit"><h2>@Model.rightButton</h2></div>
            </button>
            @Html.Hidden("LastClickedButton", @Model.rightButton);
        }
        </div>
    }
    else
    {
        <div class="row">
            <div class="col-md-4">
                <button class="btn btn-primary btn-group-justified" role="group" type="submit"><h2>@Model.leftButton</h2></button>
            </div>

            <div class="col-md-4">
                <div class="btn btn-warning btn-group-justified" role="group"><h2>@Model.rightButton</h2></div>
            </div>

            <div class="col-md-4">
                <div class="btn btn-default btn-group-justified" role="group"><h2>N/A</h2></div>
            </div>
        </div>
    }
</form>

这完全是因为您需要发送收到的所有信息,因此会产生许多冗余的@Html.Hidden / @Html.HiddenFor。 另一种方法是将Controller操作更改为:

public ActionResult IndexPost(state postedState, string clickedButton)
{
      //Do anything you need with clickedButton
}

通过route发布clickedButton:

        @using (@Html.BeginForm("IndexPost", "Home", new { clickedButton = @Model.rightButton }))
        {
            <div class="col-md-6">
                <button class="btn btn-warning btn-group-justified" role="group" type="submit"><h2>@Model.rightButton</h2></div>
            </button>
        }