Myprofile Посмотреть в макете - PullRequest
0 голосов
/ 06 мая 2019

Мне нужно вставить в мою страницу макета аватар с фотографии в base64 из "myprofile".Я получил сеансовую модель, связанную с БД.

это мой макет профиля для рендеринга img из БД:

<div class="row form-group">
                @Html.LabelFor(model => model.BinaryPhoto, htmlAttributes: new { @class = "control-label col-md-3" })
                <div class="col-md-4">
                    @if (Model.BinaryPhoto != null)
                    {
                        var base64 = Convert.ToBase64String(Model.BinaryPhoto);
                        var imgsrc = string.Format("data:image/jpg;base64,{0}", base64);
                        <img id="preview_photo" src="@imgsrc" alt="your image" style="height: 100px; width: 100px;" class="img-circle" />
                    }
                    else
                    {
                        <img id="preview_photo" src="#" alt="your image" style="display: none; height: 100px; width: 100px;" class="img-circle" />
                    }
                    <input type="file" name="Photo" id="Photo" style="width: 100%;" onchange="loadFile(event)" />
                    @*@Html.EditorFor(model => model.BinaryPhoto, null, new { htmlAttributes = new { @type = "file" } })*@
                    @Html.ValidationMessageFor(model => model.BinaryPhoto, "", new { @class = "text-danger" })
                </div>
            </div>

и это действие mycontroller:

[HttpGet]
        public ActionResult Myprofile()
        {
            var userID = ((SessionModel)Session["SessionModel"]).UserID; // get current user id
            TBL_User item = _context.TBL_User.Find(userID);
            UserModel model = new UserModel();
            model.UserID = userID;
            model.Username = item.Username;
            model.IsActive = true;
            model.Name = item.Name;
            model.BinaryPhoto = item.BinaryPhoto;
            return View(model);
        }

        [HttpPost]
        public ActionResult Myprofile(UserModel model, HttpPostedFileBase Photo)
        {
            try
            {
                var userID = ((SessionModel)Session["SessionModel"]).UserID; // get current user id
                TBL_User item = _context.TBL_User.Find(model.UserID);
                _context.Entry(item).State = EntityState.Modified; //UPDATE
                if (ModelState.IsValid)
                {
                    if (Photo != null && Photo.ContentLength > 0)
                    {
                        item.BinaryPhoto = new byte[Photo.ContentLength]; // file1 to store image in binary formate  
                        Photo.InputStream.Read(item.BinaryPhoto, 0, Photo.ContentLength);
                    }
                    using (var trans = _context.Database.BeginTransaction())
                    {
                        item.Name = model.Name;
                        //item.Email = model.Email;
                        //item.Username = model.Username;
                        //item.IsActive = model.IsActive;
                        //item.SigavUserLogin = model.SigavUserLogin;
                        //item.OperationPlaceID = model.OperationPlaceID;
                        item.LastUpdate = DateTime.UtcNow;
                        item.LastUpdateBy = userID;
                        _context.SaveChanges();
                        trans.Commit();
                    }

                    return RedirectToAction("Index");
                }
            }

и на главной странице моего макета у меня естьмаленький "аватар" в правой части, и я хочу поместить фотографию моего профиля в этот "аватар".

<li class="dropdown dropdown-user dropdown-dark">
                            <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true" aria-expanded="false">
                                <i class="fa fa-search text-symbol-color-do"></i>
                                <img alt="" class="">
                                <span class="username username-hide-on-mobile text-symbol-color-do"> @sessionModel.Username </span>
                                <i class="fa fa-angle-down text-symbol-color-do"></i>
                            </a>

как я могу это сделать?спасибо

1 Ответ

0 голосов
/ 06 мая 2019

Если вы хотите, чтобы фотография отображалась в макете (это означает, что она должна быть видна на всех страницах, а не только на странице MyProfile).

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

Например, действие может быть следующим:

[ChildActionOnly]
public ActionResult DisplayProfilePicture() {
    var userID = ((SessionModel)Session["SessionModel"]).UserID; // get current user id
            TBL_User item = _context.TBL_User.Find(userID);
            UserModel model = new UserModel();
            model.UserID = userID;
            model.Username = item.Username;
            model.IsActive = true;
            model.Name = item.Name;
            model.BinaryPhoto = item.BinaryPhoto;
            return View(model);
}

Затем в cshtml поместите следующую строку, где вы хотитеотображаемое изображение:

@Html.Action("DisplayProfilePicture")

DisplayProfilePicture должно быть частичным представлением и должно иметь логику для отображения тега img.

Подробности реализации можно найти здесь:https://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx/

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