2015-10-24 6 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 или мне нужно отдельную переменную, то как мне поддерживать состояние между запросами? Как 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: Если вы хотите отслеживать прогресс я предполагаю, что вы имеете в виду прогресс для каждого пользователя, то я бы посоветовал вам, чтобы добавить таблицу в БД, которая гласит сохраняет пользователей идентификаторы и идентификаторы вопросов, которые правильно ответили - это в случае, если вы хотите сохранить это как постоянные данные и для каждого пользователя.

вариант 2: Если вы хотите, то же самое, за исключением данных для каждого пользователя, но только для этой сессии, вы можете сохранить данные в переменной сессии в качестве dictionary<userid, list<questionid>>.

Вы должны заметить, что этот вопрос повторяется в бесконечном цикле, поэтому вы можете его изменить.

В обоих вариантах, когда вам нужно знать, что счетчик может просто пойти в таблицу или словарь и получить количество правильных ответов.

Я надеюсь, что ответит на ваш вопрос.

Чтобы использовать сессионный вар:

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

Это ответ на мой вопрос. Я не возражаю против одного из вариантов, поскольку у обоих есть цели. Есть случай для варианта 1, где мне это нужно, если я, как и у пользователя (или кто-то еще, если на то пошло), должен увидеть результаты на более позднем этапе и option2, когда результаты не рассчитывают ни на что и, следовательно, имеют значение только для текущий пользователь в то время. Единственная причина, по которой я скептически отношусь к варианту 2, потому что мне просто нужно знать, если я выйду и войду снова, мой сеанс будет сброшен. Нужно ли добавлять вызов для очистки сеанса в методе входа в Контроллер учетной записи? – Glen

+0

Я что-то упустил, сессия не доступна в контексте, который я описал, так как/где я его называю? – Glen

+0

Я не уверен на 100%, когда дело доходит до login \ logout, вы можете просто проверить это самостоятельно. и о добавлении вызова, чтобы очистить сеанс, и это легко, поскольку размещение значений там в первую очередь. Я отредактирую свой ответ с кодом – LiranBo

Смежные вопросы