Asp .net MVC ... HttpPostedFileBase uploadImage并不总是为null

时间:2015-09-27 09:07:08

标签: asp.net-mvc-4

我想上传一张图片,但它总是为空。我正在使用HttpPostedFileBase

这是我的COntroller

public ActionResult EmployeeDetail(EmployeeModel employee, HttpPostedFileBase UploadImage)//this UploadImage Object is always null
{

    EmployeeModel employeeModel = new EmployeeModel();

    if (string.IsNullOrEmpty(employeeModel.Name))
    {
        ModelState.AddModelError("Name", "Name is Required");
    }
    employeeModel.Name = employee.Name;
    if (string.IsNullOrEmpty(employeeModel.DOJ))
    {
        ModelState.AddModelError("DOJ", "DOJ is Requird");
    }
    employeeModel.DOJ = employee.DOJ;
    if (string.IsNullOrEmpty(employeeModel.DOB))
    {
        ModelState.AddModelError("DOB", "DOB is Required");
    }
    employeeModel.DOB = employee.DOB;
    if (string.IsNullOrEmpty(employeeModel.Designation))
    {
        ModelState.AddModelError("Designation", "Designation is required");
    }
    employeeModel.Designation = employee.Designation;

    string ImageName = Path.GetFileName(UploadImage.FileName);
    string Physicalpath = Server.MapPath("~/images/" + ImageName);
    UploadImage.SaveAs(Physicalpath);
    employee.UploadImage = Physicalpath;

    //string ImageName = Path.GetFileName(image.FileName);
    //string physicalPath = Server.MapPath("~/images/" + ImageName);
    //image.SaveAs(physicalPath);


    //     ModelState.AddModelError("UploadImage", "upload   is required");
    //employee.UploadImage = physicalPath;
        EmployeeBusinessLayer employeeBL = new EmployeeBusinessLayer();
        employeeBL.InsertDataRegistration(employeeModel);

    return RedirectToAction("Index");
}

这是我的观点

@using (Html.BeginForm("EmployeeDetail", "Home", FormMethod.Post, new { enctype = "multipart/form-data", @data_ajax = "false" })) //i have used all the codes which could be need to make it work...still not working
{  

<div class="MainDiv">
    <table class="Table">
        <tr class="Row">
            <td class="Column1"> Name</td>
            <td class="Column2">@Html.TextBoxFor(model => model.Name) @Html.ValidationMessageFor(model => model.Name)</td>
        </tr>
        <tr class="Row">
            <td class="Column1">DOJ </td>
            <td class="Column2">@Html.TextBoxFor(model => model.DOJ, new { @class = "datepicker", autocomplete = "off" }) @Html.ValidationMessageFor(model => model.Name) </td>
        </tr>

        <tr class="Row">
            <td class="Column1">DOB</td>
            <td class="Column2">@Html.TextBoxFor(model => model.DOB, new { @class = "datepicker", autocomplete = "off" }) @Html.ValidationMessageFor(model => model.Name)</td>
        </tr>
        <tr class="Row">
            <td class="Column1">DESIGNATION</td>
            <td class="Column2">@Html.TextBoxFor(model => model.Designation) @Html.ValidationMessageFor(model => model.Name)</td>
        </tr>
        <tr class="Row">
            <td class="Column1">UPlOAD </td>
            <td class="Column2">@Html.TextBoxFor(model => model.UploadImage, new { @type = "File"  })  
            </td>
        </tr>
        <tr class="Row">
            <td colspan="2">
                <input type="submit" class="button" name="submit" value="Submit">
                <input type="reset" class="button1" value="Clear" name="Clear">
            </td>
        </tr>

    </table>
    <script src="~/Scripts/jquery-ui-1.9.2.custom/development-bundle/jquery-1.8.3.js"></script>
    <script src="~/Scripts/jquery-ui-1.9.2.custom/development-bundle/ui/minified/jquery-ui.custom.min.js"></script>

    <script type="text/javascript">
        $(function () {
            // This will make every element with the class "date-picker" into a DatePicker element
            $('.datepicker').datepicker();
        })
    </script>
</div>
}

这是我的模特

public Model
{
    public int EmployeeId { get; set; }
    [Required(ErrorMessage = "this is required")]
    public string Name { get; set; }
    [Required (ErrorMessage = "This is required")]
    public string DOJ { get; set; }
    [Required(ErrorMessage ="This is required")]
    public string DOB { get; set; }
    [Required(ErrorMessage ="This is required")]
    public string Designation { get; set; }
    [Required(ErrorMessage = "This is required")]
    public string UploadImage { get; set; }
    public HttpPostedFileBase MyFile { get; set; }
}

1 个答案:

答案 0 :(得分:0)

我没有看到您将任何参数传递给EmployeeDetail()的任何地方。您是否能够获取EmployeeModel的数据?如果是,则至少确认您的视图能够调用EmployeeDetail()操作。

接下来,您需要确保将正确的参数传递给EmployeeDetail()。我能想到的一种方法是使用ajax。因此,您可以在单击提交按钮时创建ajax调用,并在ajax方法中传递所有数据和上载的文件输入。

这是使用带有JQuery语法的ajax调用将数据传递给操作

的示例
var inputFiles = $('inpFile').val();
var actMethod = "@Url.Action("EmployeeDetail", "Index")"
var postData = {
   "Name": $('inpName').val(),
   "DOJ": $('inpDOJ').val(),
   ...
   "UploadImage": inputFiles 
}
$.ajax()
{
     url: actMethod ,
     data: postData,
     type: "POST",
     success: function (data) {
        alert("Insert Successful!");
     }
}