Ruvo
Ruvo

Reputation: 727

Form action not hitting MVC controller method

I want to do a simple file upload using Html forms. I have the following in my view:

       <form action='@Url.Action("Save", "Order")' method="post" enctype="multipart/form-data" id="attachmentForm">
        <div >
            <label style="text-align: left;">Delivery note:</label>
        </div>
        <div style="float:left; ">
            <input type="file" name="DeliveryNoteFile" id="DeliveryNote" style="width: 400px;" />
        </div>
        <div style="float:right;  margin-top:10px; margin-left:5px; margin-bottom:0px;">
            @(Html.Kendo().Button()
                .Name("btnAddAttachment")
                .HtmlAttributes( new {type = "submit"} )
                .Content("Submit"))
        </div>            
    </form>

Now here is my controller method. Controller name: Order , Method name: Save. Why is it not hitting my controller method?

  [HttpPost]
    public ActionResult Save(HttpPostedFileBase file)
    {
        if (file != null)
        {
            var fileName = Path.GetFileName(file.FileName);
                var physicalPath = Path.Combine(Server.MapPath("C:\\Attachments"), fileName);
                file.SaveAs(physicalPath);

        }

        return Content("");
    }

Note that this is only a first draft. Any suggestions to improve this are also welcome.

Upvotes: 0

Views: 3319

Answers (2)

Kartikeya Khosla
Kartikeya Khosla

Reputation: 18873

I think in your case your button is not of type submit that is why it is not hitting controller action just try making submit button this way:

@(Html.Kendo().Button()
  .Name("btnAddAttachment")
  .HtmlAttributes( new {type = "submit"} )
  .Content("Submit"))

as @ AbbasGaliyakot comment worked for the user in comment section so i m also including it here.

Change controller action parameter name from file to DeliveryNoteFile.

Upvotes: 2

Swati Gupta
Swati Gupta

Reputation: 534

Please try this out. This would help.

@using (Html.BeginForm("Save", "Order", FormMethod.Post, new { enctype = "multipart/form-data", id = "attachmentForm" }))
{
    <div >
            <label style="text-align: left;">Delivery note:</label>
        </div>
        <div style="float:left; ">
            <input type="file" name="DeliveryNoteFile" id="DeliveryNote" style="width: 400px;" />
        </div>
        <div style="float:right;  margin-top:10px; margin-left:5px; margin-bottom:0px;">
            @(Html.Kendo().Button()
                .Name("btnAddAttachment")
                .HtmlAttributes( new {type = "submit"} )
                .Content("Submit"))
        </div> 

}

And in JS you need to bind the click function of your submit button like shown below:

$('#btnAddAttachment').bind('click', function () {
     $('#attachmentForm').submit();
});

Thanks!

Upvotes: 2

Related Questions