用户登录后更新数据库记录

时间:2014-10-30 14:26:11

标签: asp.net-mvc login tempdata

我尝试实现的内容与StackOverflow上的登录方式类似。如果您尚未登录,您仍然可以看到问题,但如果您尝试为某些问题+1,则会要求您登录。当您登录时,您的+1会被记住并添加到问题中。

这是我的情景:

  1. 用户搜索成员并选择一个 - 不需要登录
  2. 选择成员后,用户将被重定向到反馈页面,用户可以在其中向成员写入反馈消息
  3. 用户编写反馈并单击保存
  4. 无论用户是否已登录,都会保存反馈
  5. 如果用户未登录,则会打开弹出窗口,要求用户登录
  6. 用户登录后,在步骤4中创建的反馈将使用用户ID
  7. 进行更新
  8. 用户被重定向回步骤1的搜索页面
  9. 我已经陷入了第6步。我无法弄清楚获取登录用户身份的最佳方式,然后更新反馈消息。

    此代码代表第5步。它只是将反馈消息发送到控制器并保存。消息为.done后,我调用登录弹出窗口。返回message.Data包含反馈消息的ID(刚刚创建)以及用户登录后我需要的消息。

    function saveModel(feedbackMessage) {
            cc.Ajax.jpost(urlSave, { feedbackMessage: feedbackMessage })
                .done(function (message, textStatus, jqXHR) {
                    if (message.Status == 2) { // user not logged in
                        openSignInModal(message.Data);
                    }
                })
        }
    

    此代码表示第6步。返回的data是包含登录页面的部分视图。

    function openSignInModal(feedbackId) {
       var url = '/Account/LoginPartial';
    
       $.ajax({
           url: url,
           type: 'get',
           data: { returnUrl: '/Subscriber/Search', subTitle: feedbackNotSignedIn, modalTitle: '' },
           success: function (data, textStatus, jqXHR) {
               $('#pc_modal_container').html(data);
               $('#pc_modal').modal('show');
           },
       });
    }
    

    如果用户登录,那么我想获取用户的ID并使用登录用户的ID更新反馈消息(类似于我在开始时使用StackOverflow解释的内容)。

    我的问题是:

    • 我应该在哪里保留我在步骤4中获得的反馈消息ID,以便我可以使用它来更新反馈消息?

    • 当用户登录并且我想更新反馈消息时,我该如何处理这个问题?我知道我可以将它存储在TempData中,但我不是真的认为这是最好的选择,或者是它?

    • 我试图在网上找到一些例子,但没有什么比这更好。有没有人知道任何适合这种情况的例子?

    由于

1 个答案:

答案 0 :(得分:0)

尝试此过程。它没有任何技术细节,但我相信完成你的目标是很有意义的。

  1. 在反馈POST期间,将反馈帖子ID保存到Cache变量中,如PendingFeedBacks
  2. 使这些缓存数据仅适用于当前会话,且有效期较短
  3. 某处,如果用户已通过身份验证,并且有任何未决的反馈要采用,请执行此操作!
  4. 我不相信这应该是最好的解决方案,但它会起到作用。