捕获当前用户自定义字段并保存在数据库中

时间:2013-12-06 06:33:51

标签: c# asp.net-mvc

我正在使用自定义会员提供商。我正在尝试捕获 Users 表中名为 FirstName 的自定义字段。我有另一个名为 Pages 的表,用于在我的应用程序中存储新创建的页面。我正在使用存储库模式,并希望将当前用户的名字分配给用户创建的每个新页面。

我创建了一个基本控制器,用于捕获当前用户的名字和输出为ViewData。然后,我如何将ViewData内容传递到存储库并将其存储在数据库中?

这是我的基本控制器:

public abstract class ApplicationController : Controller
{
    protected override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (User != null)
        {
            var db = new applicationContext();
            var username = User.Identity.Name;

            if (!string.IsNullOrEmpty(username))
            {
                var user = db.UserProfiles.SingleOrDefault(u => u.UserName == username);
                string firstName = string.Concat(new string[] { user.FirstName });
                ViewData.Add("FirstName", firstName);
            }
        }
        base.OnActionExecuted(filterContext);
    }
}

此控制器继承自ApplicationController:

private applicationRepository repository = new applicationRepository();

public ActionResult Create(PageViewModel issue)
{
    if (ModelState.IsValid)
    {
        page.PageId = repository.Page(page);
    }

    return Json(new[] { issue });
}

这是我的存储库模式:

private applicationContext db = new applicationContext();

public int CreatePage(PageViewModel viewModel)
{
    var page = new Page();
    viewModel.CopyToIssue(page);

    db.Issues.Add(issue);
    db.SaveChanges();

    return issue.IssueId;
}

1 个答案:

答案 0 :(得分:0)

您可以创建一个基本viewmodel类,并在基本viewModel上放置一个属性FirstName。然后,在控制器中,您可以将viewdata中的FirstName添加到viewmodel上的FirstName属性。

OR

而不是使用viewdata在您的基本控制器上为FirstName创建一个属性,然后将其复制到您的viewmodel