I have the following code in a partial view:
@model MyOrganization.MyApp.Models.ProductListing
@using (Ajax.BeginForm("TagProduct", new AjaxOptions() { UpdateTargetId = "FormContainer" , OnSuccess = "$.validator.unobtrusive.parse('form');" }))
{
<p>
@Html.LabelFor(m => m.ModelNumber):
@Html.EditorFor(m => m.ModelNumber)
<A href="javascript:$('form').submit()">Tag Product with This Model Number</A>
@(Html.ValidationMessageFor(m => m.ModelNumber))
</p>
}
The viewmodel that this partial view gets is instantiated and many of its properties are hydrated by the view that contains this partial view. However, when the submit is called here, the viewmodel that the controller gets has only the ModelNumber property hydrated. All the other properties are null as if a new instance is created by the partial view with only the property that was edited (ModelNumber) getting a value.
I know that the viewmodel instance passed to the partial view has all the other property values, because if I add an @Html.EditorFor(m => m.SerialNumber) I can see the SerialNumber value that the containing view had rendered in the browser’s textbox and I also get it back in the controller when the form is submitted. However, I don’t want an editor for the SerialNumber property on the form – I just want it back in the controller when it is submitted.
How can I can I get the entire model back to the controller as it was passed in to the partial view with only the changes that the partial view made?
When it posts the form, it DOES create a new copy of the model with whatever values you posted to it. If you need the other values, put @Html.HiddenFor the other elements you need posted.