如何检查FileUploader有文件在MVC4 .net



我正在创建mvc4中的应用程序。在编辑模式下,我希望用户编辑他/她的详细信息,用户可以选择从文件加载器中选择更改他的个人资料图像。但如果用户没有在上传器中选择文件,则会发送先前的文件位置。我在表中存储图像路径与其他细节相同。因此,只创建一个存储过程。我在mvc中只有1天。直接开始学习mvc,没有师兄师姐的命令。所以请帮忙

使用强类型模型是一个很好的实践。你应该为你的User创建一个分隔ViewModel:

模型/UserEditViewModel

public int Id { get; set; }
public string Name { get; set; }
// Other properties
public HttpPostedFileBase Photo { get; set; }

控制器:

[HttpGet]
public ActionResult Edit(int id)
{
    // Get user from database
    var user = db.Users.Find(id);
    // Map user to UserEditViewModel
    var userVM = new UserEditViewModel
        {
            Id = user.Id;
            Name = user.Name;
            // Other mappings
        }
    return View(userVM);
}
[HttpPost]
public ViewResult Edit(UserEditViewModel model)
{
    if (ModelState.IsValid)
    {
        var existingUser = db.Users.Find(model.Id);
        if (model.Photo != null && model.Photo.ContentLength > 0)
        {
            // Update database and copy image to server
        }
    }
}

视图:

@model YourProject.Models.UserEditViewModel
@using (Html.BeginForm("Edit", "YourController", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    // Form stuff
    @Html.HiddenFor(m => m.Id)
    @Html.EditorFor(m => m.Name)
    @Html.EditorFor(m => m.Photo) // Creates <input type="file" name="Photo" />
    <input type="submit" value="Save" />
}

下面的代码是基于您将文件名保存在db表中并将文件保存在应用服务器上的假设。

代码如下:

模型:

public string Photo {get;set;}

视图:

<input type='file' id='file'/> 
@Html.HiddenFor(m=>m.Photo)

JS:

// if there is a photo update by user, change the Photo hidden element value
//get the final name of the photo saved in server    
$("#Photo").val(newname);

然后只需张贴您的表单。

如果用户没有更改其照片,则前一个值将保留在隐藏元素中并更新到db。因此,照片列实际上不会发生任何变化。

我强烈推荐这个教程给MVC初学者。

最新更新