Question

why do I always have so much trouble with the model binder?? I have the following controller:

namespace X.Web.Controllers
{
    public class ExpertsVM
    {
        public string GivenName;
        public string Surname;
    }

    public class AuthController : Controller
    {
        [HttpPost]
        public ActionResult RegisterExpert(ExpertsVM v)
        {

and my view looks like this:

@using X.Web.Controllers
@model ExpertsVM

@using (Html.BeginForm("RegisterExpert", "Auth"))
{
    @Html.EditorFor(x => x.GivenName)
    @Html.EditorFor(x => x.Surname)

so the form gets rendered like this:

<form action="/Auth/RegisterExpert" method="post">
<input class="text-box single-line" id="GivenName" name="GivenName" type="text" value="" />
<input class="text-box single-line" id="Surname" name="Surname" type="text" value="" />

but when the action gets invoked, v contains all nulls. if I declare the action like this:

[HttpPost]
public ActionResult RegisterExpert(FormCollection f)
{

I see all the values... so what am I doing wrong here?

Was it helpful?

Solution

I'm not 100% sure but I would use property instead of public field.

try

public class ExpertsVM
{
    public string GivenName {get;set;}
    public string Surname {get;set;}
}

OTHER TIPS

The model binder looks for public properties on the model. VdesmedT's answer is right, but I am adding this to add emphasis to the point (he wasn't 100% sure, I am).

You could also spare yourself one of the using statments by doing:

@model X.Web.Controllers.ExpertsVM

I have upvoted VdesmedT's answser. You should mark that as the answer.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top