2015-10-24 210 views
0

MVC的新手。我做了教程@ [http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/build-a-single-page-application-(spa)-with-aspnet-web-api-and-angularjs]并从此生成问答网站。如果我想保持进度,即保持正确答案的数量的计数,是否需要从检索db.TriviaAnswers对象计算此值,还是需要将Count属性添加到TriviaAnswer类,还是需要一个单独的变量,那么我如何维护请求之间的状态? Like ViewBag不可用于ASP.NET MVC WEB API

public async Task<IHttpActionResult> Post(TriviaAnswer answer){...} 

方法。

方案1如下所建议:

namespace GeekQuiz.Models 
{ 
    using System.ComponentModel.DataAnnotations; 
    using System.ComponentModel.DataAnnotations.Schema; 
    using Newtonsoft.Json; 

    public class TriviaResults 
    { 
     [Required, Key, Column(Order=1)] 
     public string UserId { get; set; } 

     [Required, Key, Column(Order=0)] 
     public virtual int QuestionId { get; set; } 
    } 
} 

此代码引发InvalidOperationException在该方法中:

private async Task<TriviaQuestion> NextQuestionAsync(string userId) 

上的代码的第一行。

lastQuestionId = ... 

回答

1

我在几个月前完成了本教程。

选项1:如果你想跟踪进展情况我假设你的意思是每个用户的进展,那么我会建议你添加一个表,其中列明了数据库保存用户的ID和进行正确回答问题的IDS - 如果您想将其作为持久性数据和每位用户进行保存。

选项2:如果你想同样的事情,保存数据每用户,但只有这个环节,你可以作为一个dictionary<userid, list<questionid>>会话变量保存数据。

你应该注意的一件事是那些问题在无限循环中重复,所以你可能想改变它。

在这两个选项中,当你需要知道计数你可以只是去表或字典,并得到正确答案的数目。

我希望能回答你的问题。

使用Session VAR:

Session["name"] = value; 
Session.Remove("name"); 
+0

它不回答我的问题。我不介意这两种选择,因为它们都有目的。如果我在用户(或任何其他人)需要在稍后阶段看到结果,并且选项2结果不计入任何内容并因此只对当前的用户。我对选项2持怀疑态度的唯一原因是因为我只需要知道我是否注销并再次登录,我的会话就会重置。我是否需要添加呼叫以在帐户控制器登录方法中清除会话? – Glen

+0

我在这里错过了什么,Session在我描述的上下文中不可用,所以我怎么称呼它? – Glen

+0

关于login \ logout,我不是100%确定的,你可以直接自己检查一下。并添加一个呼叫来清除会话,这很容易,因为将值放在首位。我将使用代码 – LiranBo