Problem Scenario:
I am having an issue that when I post
to a controller, I loose model binding and everything in my model is NULL. Here is the code that I am using:
View:
@model Models.StateDTO
@using (Html.BeginForm("AddState", "Home",new {area="Admin" }, FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
State Name
@Html.TextBoxFor(m => m.State)
@Html.ValidationMessageFor(m => m.State)
}
@using (Html.BeginForm("AddState", "Home",new {area="Admin" }, FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
State Name
@Html.TextBoxFor(m => m.State)
@Html.ValidationMessageFor(m => m.State)
}
Model:
public class StateDTO
    {      
 
        public int
Id { get; set; }
        [Required]
        public string
State { get; set; }      
    }
Controller:
        [HttpPost]
       
[ValidateAntiForgeryToken]
        public
ActionResult AddState(StateDTO state)
        {
         
  if (state != null && ModelState.IsValid)
         
  {
         
      //.....
         
  }
         
  return View();
        }
Why is everything in
my model (i.e. StateDTO state) NULL?
Solution:
One possible
reason for view model is NULL :
·        
The name of model
in action parameter be the same as one of view model's properties
Ex: Here,
same name means case insensitive (State is same as state)
Hence, the correct
controller action method should be like below:
        [HttpPost]
       
[ValidateAntiForgeryToken]
        public
ActionResult AddState(StateDTO vwState)
        {
         
  if (vwState != null && ModelState.IsValid)
         
  {
         
      //.....
         
  }
         
  return View();
        }
Here, "State" property name in model is
different then action parameter i.e."vwState"
Hope this helps... Cheers :)
 
No comments:
Post a Comment