如何修复asp.net mvc中的App_Web_xxxx.dll中发生的System.NullReferenceException?

时间:2016-07-29 17:22:34

标签: c# asp.net asp.net-mvc asp.net-mvc-4

这是我的管理控制器的索引操作的视图代码的一部分。

<div class="mngimg">
    @using (Html.BeginForm("UploadPhoto", "Manage", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
        <div class="btn btn-default browseimg">
            <input type="file" name="file" id="files" onchange="this.form.submit()" />
        </div>
        <div class="btn btn-default browseimg">
            @Html.ActionLink("Remove Photo", "RemovePhoto", "Manage")
        </div>
    }
</div>
                </div>
            }
        </dd>
<dt>Password:</dt>
<dd>
    [
    @if (Model.HasPassword) <!-- Here is my error. The Model is null -->
            {
        @Html.ActionLink("Change your password", "ChangePassword")
    }
    else
    {
        @Html.ActionLink("Create", "SetPassword")
    }
    ]
</dd>

每当我打开此页面并单击“删除照片”时,我都会收到错误消息An exception of type 'System.NullReferenceException' occurred in App_Web_ckoryptg.dll but was not handled in user code。我试过调试,但我无法弄清楚为什么我的Model.HasPassword变为null。这是我从Manage Controller获取的RemovePhoto Action。

[HttpPost]
public async Task<ActionResult> UploadPhoto(HttpPostedFileBase file)
{
    if (file != null && file.ContentLength > 0)
    {
        var user = await GetCurrentUserAsync();
        var userId = user.Id;
        var fileExt = Path.GetExtension(file.FileName);
        var fnm = userId + ".png";
        if (fileExt.ToLower().EndsWith(".png") || fileExt.ToLower().EndsWith(".jpg") || fileExt.ToLower().EndsWith(".gif"))// Important for security if saving in webroot
        {
            var filePath = HostingEnvironment.MapPath("~/Content/Images/") + fnm;
            var directory = new DirectoryInfo(HostingEnvironment.MapPath("~/Content/Images/"));
            if (directory.Exists == false)
            {
                directory.Create();
            }
            ViewBag.FilePath = filePath.ToString();
            file.SaveAs(filePath);
            return RedirectToAction("Index", new { Message = ManageMessageId.PhotoUploadSuccess });
        }
        else
        {
            return RedirectToAction("Index", new { Message = ManageMessageId.FileExtensionError });
        }
    }
    return RedirectToAction("Index", new { Message = ManageMessageId.Error });// PRG
}

private async Task<ApplicationUser> GetCurrentUserAsync()
{
    return await UserManager.FindByIdAsync(User.Identity.GetUserId());
}

我打开了一个Visual Studio附带的默认MVC项目,我在本教程ASP.NET upload images中添加了这些额外的内容。我该如何解决这个问题?

编辑: 这是我的RemovePhoto操作。

public ActionResult RemovePhoto()
        {
            string file = "~/Content/Images/" + User.Identity.GetUserId() + ".png";
            if(System.IO.File.Exists(Server.MapPath(file)))
                System.IO.File.Delete(Server.MapPath(file));
            return View("Index");
        }

1 个答案:

答案 0 :(得分:0)

只需重定向回Index行动即可。这样,您就不必在RemovePhoto操作中实例化您的索引模型。可以阅读有关此模式的更多信息here