I am using cshtml as view
this is my input:
@Html.TextArea("DESCRIPTION", null, new { @class = "field-longtext", @cols = 100, @rows = 5, maxlength = 255 })
@Html.TextBox("DOC_TYPE", null, new { @class = "field-longtext", maxlength = 10 })
@Html.TextBox("DOC_FILE", null, new { @class = "field-longtext", @type = "file" })
and using ajax post
function UploadFile() {
    var url = '@Url.Action("CreateUploadFile")';
    var data = {};
    var result = false;
    $('#@ViewBag.FormName').find('input, textarea').each(function () {
        data[$(this).attr('name')] = $(this).val();
    });
    data.PROBLEM_CALL_ID = @Model.Model.PROBLEM_CALL_ID;
    $.ajax({
        type: 'POST',
        url: url,
        data: data,
        async: false,
        success: function (data) {
            if (data.result) {
                var selectedRow = SubFormService.tableList['#@ViewBag.TableName'].selectedRow;
                result = true;
            } else {
                alert(data.errorMsg);
                result = false;
            }
        }
    });
    return result;
}
My Controller:
    [HttpPost]
    public ActionResult CreateUploadFile(Models.Shared.DocumentModel vm)
    {
        var id = -1;
        var result = string.Empty;
        var json = new BasicJsonResult();
        var file = vm.DOC_FILE;
        LogUtility.Debug(file.ContentLength.ToString());
        if (file != null && file.ContentLength > 0)
        {
            var fileName = Path.GetFileName(file.FileName);
            LogUtility.Debug(fileName);
            LogUtility.Debug(Server.MapPath("~/Images/"));
            var path = Path.Combine(Server.MapPath("~/Images/"), fileName);
            file.SaveAs(path);
        }
        return Json(json, JsonRequestBehavior.AllowGet);
    }
the code var file = vm.DOC_FILE; warns me (Object reference not set to an instance of an object.), but I can get another control value (vm.DESCRIPTION, vm.DOC_TYPE).
Please help.
Also, I want to download file when that file is uploaded.
 
     
     
     
    