Wednesday, 21 August 2013

Asp.Net MVC passing model via ajax

Asp.Net MVC passing model via ajax

I've got a model that I'd like to use to generate/bind a pop-up form that
remains hidden on a page until needed for use.
<table id="dlgNewEdit" class="vtableform hide">
<tr>
<td>@Html.CustomLabelFor(m => new NewEditModel().Name)</td>
<td>
@Html.HiddenFor(m => new NewEditModel().OemEquipmentMakeId)
@Html.CustomTextBoxFor(m => new NewEditModel().Name, new {
@class = "focus w300" })
@Html.ValidationMessageFor(m => new NewEditModel().Name)
</td>
</tr>
<tr>
<td>@Html.CustomLabelFor(m => new NewEditModel().Description)</td>
<td>
@Html.CustomTextAreaFor(m => new NewEditModel().Description,
new { @class = "w300" })
@Html.ValidationMessageFor(m => new NewEditModel().Description)
</td>
</tr>
</table>
Resulting in:
<table id="dlgNewEdit" class="vtableform hide">
<tr>
<td><label class="required" for="Name">* Name</label></td>
<td>
<input data-val="true" data-val-number="The field
OemEquipmentMakeId must be a number." data-val-required="The
OemEquipmentMakeId field is required." id="OemEquipmentMakeId"
name="OemEquipmentMakeId" type="hidden" value="0" />
<input autocomplete="off" class="required tip focus w300"
data-val="true" data-val-length="Cannot exceed 50 characters"
data-val-length-max="50" data-val-required="Required"
id="Name" maxlength="50" name="Name" title="Enter the make
name" type="text" value="" />
<span class="field-validation-valid" data-valmsg-for="Name"
data-valmsg-replace="true"></span>
</td>
</tr>
<tr>
<td><label for="Description">Description</label></td>
<td>
<textarea class="w300 tip" cols="20" data-val="true"
data-val-length="Cannot exceed 500 characters"
data-val-length-max="500" id="Description" name="Description"
rows="2" title="Enter a brief description">
</textarea>
<span class="field-validation-valid"
data-valmsg-for="Description"
data-valmsg-replace="true"></span>
</td>
</tr>
</table>
As you can see, I can't figure out any way to generate the correct form
Ids/Names without using "new NewEditModel()" in all my expressions. Doing
so works just fine, but it seems a bit verbose. I want my field names to
exactly match my model properties because I want the model to bind in the
following action which is called via jQuery ajax:
[HttpPost]
[ValidateAntiForgeryToken]
public JsonNetResult New(NewEditModel model)
{
}
I tried created a variable:
var myModel = new NewEditModel();
using:
@Html.HiddenFor(m => myModel.OemEquipmentMakeId)
But that generates id/name "myModel.OemEquipmentMakeId" which doesn't bind
in my action. Is there a way to do what I want in a different manor?

No comments:

Post a Comment