asp.net-mvc - MVC 4 将个人资料图像添加到 RegisterModel

标签 asp.net-mvc asp.net-mvc-4 asp.net-membership

如何添加将个人资料图像上传到 MVC 4 中默认 RegisterModel 的选项?

最佳答案

此答案将图像转换为字节数组,以便您可以将其保存在数据库中。如果您想将图像保存到文件存储中,可以轻松修改它。

View 模型的代码。重要的部分是 multipart/form-data 属性:

 @using (Html.BeginForm("Register", "Account", null, FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary()

        <fieldset>
            <legend>Registration Form</legend>
            <ol>
                <li>
                    @Html.LabelFor(m => m.UserName)
                    @Html.TextBoxFor(m => m.UserName)
                </li>
                <li>
                    @Html.LabelFor(m => m.Password)
                    @Html.PasswordFor(m => m.Password)
                </li>
                <li>
                    @Html.LabelFor(m => m.ConfirmPassword)
                    @Html.PasswordFor(m => m.ConfirmPassword)
                </li>
                <li>
                    <label for="register-avatar">Upload your photo</label>
                    <input id="register-avatar"  type="file" name="ProfileImage" />
                </li>
            </ol>
            <input type="submit" value="Register" />
        </fieldset>
    }

注册模型:

public class RegisterModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }

    public HttpPostedFileBase ProfileImage { get; set; }

}

Register.cshtml View 的 AccountController 的 HTTPPost:

[HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Register(RegisterModel model)
    {

        if (ModelState.IsValid)
        {
            // Attempt to register the user
            try
            {
                WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
                WebSecurity.Login(model.UserName, model.Password);

                MemoryStream target = new MemoryStream();
                model.ProfileImage.InputStream.CopyTo(target);
                byte[] data = target.ToArray();

                var profileImage = new ProfileImage();
                profileImage.Data = data;
                profileImage.MimeType = model.ProfileImage.ContentType;

                /// other code to save the image to the database

                return RedirectToAction("Index", "Profile/" + model.UserName);
            }
            catch (MembershipCreateUserException e)
            {
                ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

这是我如何设法上传个人资料图像以及 MVC 4 模板中内置的注册的快速概述。

关于asp.net-mvc - MVC 4 将个人资料图像添加到 RegisterModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19776346/

相关文章:

c# - Entity Framework 不生成 ApplicationUser 外键

c# - PostSharp 问题无法找到 system.web.mvc 的程序集,版本 = 3.0.0.0 当没有项目引用它时

c# - 如何处理 Multi-Tenancy ASP MVC 站点的路径设置

c# - ASPNetAuthentication——在哪里可以找到 minRequiredPasswordLength

.net - 具有用于不同ASP.NET MVC 3区域的不同登录页面

asp.net-mvc - 如何在 asp.net MVC 中压缩内容?

asp.net-mvc - ajax 链接处理不当

javascript - "Add item"用于绑定(bind)到集合的表单的 JavaScript 按钮——MVC3 中的情况是否更好?

asp.net-mvc-4 - MVC 4 缩小不能正常工作

wcf webhttp 认证