views:

134

answers:

2

I am trying to upload images via a form which sits in partial view using MVC.

View Code:

<form action="/Item/ImageUpload" method="post" enctype="multipart/form-data">
   <%= Html.TextBox("ItemId",Model.ItemId) %>
   <input type="file" name="file" id="file"  />
   <input type="submit" value="Add" />
</form>

Action Code:

public void ImageUpload(string ItemId, HttpPostedFileBase file)
{
// upload image
// Add Image record to database
// Associate Image record to Item record
//Go back to existing view where the partial view sits
RedirectToAction("Details/"+ItemId);
}

The Image is uploaded successful

All the data manipulation are working as expected

However instead of redirect to view "Item/Details/id", page went to "/Item/ImageUpload"

I tried several different way of doing this including using jsonResultAction, but all failed in this same result.

where did i do wrong, any ideas? thanks in advance

Edit:

I just realized all the routing which are render by the code is not working.

for example: [ <%= Html.ActionLink("Log Off", "LogOff", "Account") %> ] instead of rendering <a href="/Account/LogOff">Home</a> it renders <a href="">Home</a>

however all the routings which were hard coded are all working.

Where did i break it?? It troubles that I cant event restore it.

Code for Global.asax.cs

public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");


            //routes.MapRoute(
            //   "ImageResize",
            //   "{controller}/{action}/{id}/{value}",
            //   new { controller = "Image", action = "ShowImage", id = "", value = "" }); 

            routes.MapRoute(
                "Default",                                              // Route name
                "{controller}/{action}/{id}/",                           // URL with parameters
                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
            );


        }

        protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }


    }
+1  A: 

I think you need to use return RedirectToAction("Deati....

If you already have the keyword return there then add that to your question and I'll remove this answer

EDIT

In that case I'd write a route which allows you to then say something like return RedirectToRoute("name", model);

EDIT 2

All I can offer at this point I think is from the account controller that's auto generated.

public ActionResult LogOff()
{

    FormsAuth.SignOut();

    return RedirectToAction("Index", "Home");
}

Looking at the code you have presented I see public void ImageUpload rather than public ActionResult ImageUpload.

griegs
I had tried that too, not working neither
D.J
I have just tried again by returning ActionResult, but page still went to "Item/ImageUpload" with "No route in the route table matches the supplied values" Error, since i did not create that view in my project at all.
D.J
A: 
RedirectToAction("Details/"+ItemId);

This should Be

return RedirectToAction("Details", new {Id = ItemId});

You dont just add stuff to the RedirectToAction like that. It uses reflection to pick up the Parameters for the method that you are redirecting to.

burnt_hand