c# - 用户推送文件后如何重新加载头像并替换为默认图片?- ASP.NET MVC
问题描述
我有一个注册表单供用户输入:头像、姓名、邮件等...头像的默认图像是用户图像,我如何将此图像更新为用户推送的新头像网络?这是注册视图:
@model TimShop.Models.USERS
using (Html.BeginForm("SignUp", "Account", FormMethod.Post, new { @class = "login100-form validate-form signUpForm" }))
{
@Html.AntiForgeryToken()
<div class="container-login100">
<div class="wrap-login100 signUpPageFlex">
<div class="login100-pic js-tilt" data-tilt="" style="will-change: transform; transform: perspective(300px) rotateX(0deg) rotateY(0deg);">
<img src="~/Content/images/img-01.png" alt="avatar" class="signUpImg">
<input type="file" name="file" id="uploadAvatar" class="fileImgUpload">
<label for="uploadAvatar">
<i class="fa fa-upload"></i> Upload your avatar
</label>
</div>
<span class="login100-form-title signUpFormTitle">
Member resgiteration
</span>
<div class="wrap-input100 validate-input">
@Html.EditorFor(model=>model.FULLNAME, new { htmlAttributes = new { @class= "input100 SignUpInput", @required = "true", placeholder = "Full name", name= "fullname" } } )
<span class="focus-input100"></span>
</div>
<div class="wrap-input100 validate-input">
@Html.EditorFor(model => model.EMAIL, new { htmlAttributes = new { @class = "input100 SignUpInput", @required = "true", placeholder = "Email", name = "email" } })
<span class="focus-input100"></span>
</div>
<div class="wrap-input100 validate-input">
@*<input class="input100 SignUpInput" type="password" name="pass" placeholder="Password">*@
@Html.PasswordFor(model => model.PASS, new { htmlAttributes = new { @class = "input100 SignUpInput", @required = "true", placeholder = "Password", name = "pass" } } )
<span class="focus-input100"></span>
</div>
<div class="wrap-input100 validate-input">
@Html.Password("confirmPass", new { htmlAttributes = new { @class = "input100 SignUpInput", @required = "true", placeholder = "Confirm password", name = "passConfirm" } })
<span class="focus-input100"></span>
</div>
<div class="wrap-input100 validate-input">
@Html.EditorFor(model => model.DATEOFBIRTH, new { htmlAttributes = new { @class = "input100 SignUpInput", @required = "true", placeholder = "Date of birth", @type="date", name = "dob" } })
<span class="focus-input100"></span>
</div>
<div class="wrap-input100 validate-input">
@Html.EditorFor(model=>model.PHONE, new { htmlAttributes = new { @class = "input100 SignUpInput", @required = "true", placeholder = "PHONE", @type = "number", name = "phone" } } )
<span class="focus-input100"></span>
</div>
<div class="container-login100-form-btn container-signUp-form">
<input class="login100-form-btn signUpbutton" type="submit" value="COMPLETE"/>
</div>
</div>
</div>
<!-- Body signUp end -->
}
还有我处理注册过程的控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SignUp([Bind(Include = "FULLNAME,PASS,EMAIL,DATEOFBIRTH,PHONE,AVATAR")] USERS user, string confirmPass, HttpPostedFileBase file)
{
bool error = false;
try
{
// TODO: Add insert logic here
if (db.USERS .Where(m => m.EMAIL == user.EMAIL).Any())
{
ViewData["insertResult"] = "This email is already taken.";
}
else
{
if(file != null)
{
file.SaveAs(HttpContext.Server.MapPath("~/Content/images/users/") + file.FileName);
user.AVATAR= file.FileName;
}else
{
user.AVATAR = "";
}
db.USERS.Add(user);
db.SaveChanges();
Session["account"] = user.FULLNAME;
return RedirectToAction("Success", "Home", new { displayText = "Successful registeration" });
}
}
catch
{
ViewData["insertResult"] = "Cannot register your account. Please check again";
}
return View();
}
或者你可以看到描述我的想法的图像很清楚:我的想法
解决方案
您必须在您的视图代码中编写一些 javascript,如下所示:
<script type="text/javascript">
function onChange(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$('#signUpImg').attr('src', e.target.result);
}
reader.readAsDataURL(input.files[0]);
}
}
$("#uploadAvatar").change(function(){
onChange(this);
});
现在更改您的视图部分图像代码,如下所示:
<img src="~/Content/images/img-01.png" alt="avatar" id = "signUpImg" class="signUpImg">
希望对你有帮助!
推荐阅读
- android - RecyclerView 在第一个 (4 - 5) 滚动时滞后
- android - PocketSphinx:如何识别关键字后跟动态词?
- java - 从服务中获取价值的启动画面
- angular - 当我选择单选按钮时,Angular-Material 单选按钮数据未绑定
- c# - c# razor generator 编译错误与 NancyFx 项目
- vue.js - Vue Draggable with touch - drop 不会触发
- .htaccess - htaccess 从带有子目录的文件夹重定向到单路径目录
- python - Django - Celery catch(try-except block) 错误 - 冻结/挂起代码的问题
- oracle - 阿拉伯字符显示为??? 在 Power BI 中通过 ODBC 与 Oracle 12c 连接
- r - 无法让 bookdown rmd_subdir ["dir"] 工作