3

I don't really know where to look for an error... the situation: I have an ASPX view which contains a form and a few input's, and when I click the submit button everything is POST'ed to one of my ASP.NET MVC actions.

When I set a breakpoint there, it is hit correctly. When I use FireBug to see what is sent to the action, I correctly see data1=abc&data2=something&data3=1234.

However, nothing is arriving in my action method. ViewData is empty, there is no ViewData["data1"] or anything else that would show that data arrived.

How can this be? Where can I start looking for the error?

9
  • wrt data1=abc&data2=... what does the method signature for your action method look like? Commented May 28, 2010 at 19:09
  • No parameters. ViewData["data1"] should be able to access the value. But it's null, even though FireBug shows that the value was submitted. Commented May 28, 2010 at 19:10
  • 3
    you know guys, actually there is no postback in mvc :), it's just post Commented May 28, 2010 at 19:16
  • 1
    @David: I was actually using parameters in my original function but couldn't get model binding to work, then created a test method without parameters, and the rest is history. Of course the FormCollection shouldn't be accessed directly. Commented May 28, 2010 at 19:17
  • 2
    @Omu, yeah no postback in mvc and thanks God :-) Good remark. Commented May 28, 2010 at 19:19

4 Answers 4

8

ViewData is relevant when going from the controller to the view. It won't post back.

you'll need your action method to look something like

public ActionResult DoSomething(string data1, string data2, int data3) { ...

Then the (model? parameter?) binding should take care of things for you

Sign up to request clarification or add additional context in comments.

Comments

1

Try modifying your Action to accept FormCollection:

public ActionResult DoSomething(FormCollection fc)
{
     System.Diagnostics.Debug.Writeline(fc["data1"]);
}

Comments

0

If you want to see what is posted to your View, accept FormCollection as a parameter, or bind your form elements directly to a model. Like so:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult PostToThisView(FormCollection formItems)
{
    var data1 = formItems["data1"];
    return View();
}

Also, see this question.

Comments

0

try this:

Request["data1"]

or

Request.Form["data1"]

or

[HttpPost]
public ActionResult YourPostAction(object data1)

or

[HttpPost]
public ActionResult YourPostAction(ACLassThatHasData1Prop viewmodel)
//your view doesn't has to be strongly typed to the type of the parameter in this case

2 Comments

Regarding the last example, the model used for the parameter doesn't have to be the same as the model that is strongly-typed to the view from which the request came. The model binder will simply take the values stored in the forms collection (or the query string if the request is a GET) and try to used them to populate whatever type of object is specified as the parameter.
@Dr. Wily's Apprentice, thnx for telling me that

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.