显示身份用户的名称在保存ID时创建和上次更新记录的用户

时间:2018-01-24 22:59:39

标签: asp.net-mvc entity-framework linq razor asp.net-identity

我一定不能用正确的短语搜索。这是一个简单的概念,我已经在其他语言和框架中轻松完成了。

我正在为创建记录的人和最后更新记录的UserID保存UserID。我想显示User.FirstName +''+ User.LastName。而不是显示UserID。

我目前的方式LastEditBy和CreateBy在页面上显示为空白。

控制器:我获取客户模型并手动将模型映射到customerViewModel,然后将其传递给我的部分视图。

    public ActionResult Edit(int customerId)
    {
        Customer customer = DbContext.Customers.FirstOrDefault(x => x.CustomerId == customerId);

        CustomerViewModel customerViewModel = MapToViewModel(customer);
        customerViewModel.UserSelectList = GetUserGroupList();
        UserManager<ApplicationUser> _userManager = HttpContext.GetOwinContext().Get<ApplicationUserManager>();

        var CreateByUser = _userManager.FindById(customerViewModel.CreateById);
        var EditByUser = _userManager.FindById(customerViewModel.LastEditById);

        customerViewModel.CreateBy = CreateByUser.FirstName + " " + CreateByUser.LastName;
        customerViewModel.LastEditBy = EditByUser.FirstName + " " + EditByUser.LastName;
        if (Request.IsAjaxRequest()) {
            return PartialView("_CustomerEditPartial", customerViewModel);
        }

        return View("_CustomerEditPartial", customerViewModel);
    }

CustomerViewModel:

public class CustomerViewModel : DbContext{
    public CustomerViewModel(): base("name=CustomerViewModel")
    {
    }
    [Key]
    public int CustomerId { get; set; }

    [MaxLength(128), ForeignKey("ApplicationUser")]
    public string UserId { get; set; }
    public SelectList UserSelectList { get; set; }

     #region additional Fields
     // This overrides default conventions or data annotations
     [Required(ErrorMessage = "Please enter your first name.")]
     [StringLength(50)]
     [Display(Name = "First Name")]
     public string FirstName { get; set; }

     [Required(ErrorMessage = "Please enter your last name.")]
     [StringLength(100)]
     [Display(Name = "Last Name")]
     public string LastName { get; set; }

     [DataType(DataType.Date)]
     [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
     public DateTime CreateDate { get; set; } = DateTime.Now;

     public string CreateById { get; set; }

     [NotMapped]
     public string CreateBy { get; set; }

     public string LastEditById { get; set; }
     [NotMapped]
     public string LastEditBy { get; set; }

     [DataType(DataType.Date)]
     [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
     public DateTime LastEditDate { get; set; } = DateTime.Now;

     public virtual ApplicationUser ApplicationUser { get; set; }

 }

 public class UserGroupList
 {
     public string Value { get; set; }
     public string Text { get; set; }
 }

我的部分视图页面:_CustomerEditPartial.cshtml

@model WOA.ViewModels.CustomerViewModel

<div class="modal-dialog">
    <div class="modal-content">
        <div class="modal-header">
            <button type="button" class="close" daa-dismiss="modal" aria-hidden="True">x</button>
            <h4 class="modal-title">Edit Customer</h4>
        </div>
        @using (Ajax.BeginForm("Edit", "Customers", null, new AjaxOptions { HttpMethod = "Post", OnFailure = "OnFail" }, new { @class = "form-horizontal", role = "form" })) {
             <div class="modal-body">
                <div class="form-horizontal">
                    <hr />
                    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
                @Html.HiddenFor(model => model.CustomerId)
                <div class="form-group">
                    @Html.LabelFor(model => model.UserId, "UserId", htmlAttributes: new { @class = "control-label col-md-2" })
                    <div class="col-md-10">
                        @Html.DropDownListFor(model => model.UserId, ViewData.Model.UserSelectList, "Select One", new { @class = "form-control" })
                        @Html.ValidationMessageFor(model => model.UserId, "", new { @class = "text-danger" })
                    </div>
                </div>

                <div class="form-group">
                    @Html.LabelFor(model => model.FirstName, htmlAttributes: new { @class = "control-label col-md-2" })
                    <div class="col-md-10">
                        @Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control" } })
                        @Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "text-danger" })
                    </div>
                </div>

                <div class="form-group">
                    @Html.LabelFor(model => model.LastName, htmlAttributes: new { @class = "control-label col-md-2" })
                    <div class="col-md-10">
                        @Html.EditorFor(model => model.LastName, new { htmlAttributes = new { @class = "form-control" } })
                        @Html.ValidationMessageFor(model => model.LastName, "", new { @class = "text-danger" })
                    </div>
                </div>

                <div class="form-group">
                    @Html.LabelFor(model => model.CreateDate, htmlAttributes: new { @class = "control-label col-md-2" })
                    <div class="col-md-10">
                        @Html.TextBoxFor(model => model.CreateDate, new { @readonly = "readonly" })
                    </div>
                </div>

                <div class="form-group">
                    @Html.LabelFor(model => model.CreateBy, htmlAttributes: new { @class = "control-label col-md-2" })
                    <div class="col-md-10">
                        @Html.TextBoxFor(model => model.CreateBy, new { @readonly = "readonly" })
                    </div>
                </div>

                <div class="form-group">
                    @Html.LabelFor(model => model.LastEditBy, htmlAttributes: new { @class = "control-label col-md-2" })
                    <div class="col-md-10">
                        @Html.TextBoxFor(model => model.LastEditBy, new { @readonly = "readonly" })
                    </div>
                </div>

                <div class="form-group">
                    @Html.LabelFor(model => model.LastEditDate, htmlAttributes: new { @class = "control-label col-md-2" })
                    <div class="col-md-10">
                        @Html.TextBoxFor(model => model.LastEditDate, new { @readonly = "readonly" })
                    </div>
                </div>

            </div>
        </div>
        <div class="modal-footer">
            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                    <input type="submit" class="btn btn-primary" value="Save changes" />
                </div>
            </div>
        </div>
        <script type="text/javascript">
            function OnSuccess() {
                alert("success");
            }
            function OnFail() {
                alert("fail");
            }
            function OnComplete() {
                alert("Complete");
            }

        </script>
    }

    <div>
        @Html.ActionLink("Back to List", "Index")
    </div>
</div>
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}

我已经更新了我的代码,它现在正在运行,但我不相信这是正确的方法。
我相信我应该能够在初始调用时通过Linq返回我需要的其他值,而不是再向数据库再次访问其他值。
我无法找到一种方法来使用Linq。

提前感谢您的时间和精力。

0 个答案:

没有答案