Non sono sicuro di aver inquadrato correttamente la domanda in precedenza ma cercherò di spiegare al meglio la domanda che ho.Il modello mantiene la sua struttura quando i dati vengono ricevuti nel controller?
Ho seguito ContactUsModel
che è una parte di HomeViewModel
, meglio dire Nested Modello Classe in un unico model
public class ContactUsDataModel
{
public string ContactName { get; set; }
public string ContactEmail { get; set; }
public string ContactMessage { get; set; }
public string ContactPhone { get; set; }
}
e sto ottenendo questo Model
cui in HomeViewModel
come di seguito:
public class HomeViewModel
{
/*My other models goes here*/
public ContactUsDataModel CUDModel { get; set; }
}
Ora nella vista Index.cshtml
creo fortemente una vista modulo come di seguito:
@model ProjectName.Models.HomeViewModel
<!--I have other views for other models-->
@using (Html.BeginForm("ContactPost", "Home", FormMethod.Post, new { id = "contactform" }))
{
@Html.TextBoxFor(m => m.CUDModel.ContactName, new { @class="contact col-md-6 col-xs-12", placeholder="Your Name *" })
@Html.TextBoxFor(m => m.CUDModel.ContactEmail, new { @class = "contact noMarr col-md-6 col-xs-12", placeholder = "E-mail address *" })
@Html.TextBoxFor(m => m.CUDModel.ContactPhone, new { @class = "contact col-md-12 col-xs-12", placeholder = "Contact Number (optional)" })
@Html.TextAreaFor(m=>m.CUDModel.ContactMessage, new { @class = "contact col-md-12 col-xs-12", placeholder = "Message *" })
<input type="submit" id="submit" class="contact submit" value="Send message">
}
faccio ajax
Post come di seguito:
$('#contactform').on('submit', function (e) {
e.preventDefault();
var formdata = new FormData($('.contact form').get(0));
$.ajax({
url: $("#contactform").attr('action'),
type: 'POST',
data: formdata,
processData: false,
contentType: false,
//success
success: function (result) {
//Code here
},
error: function (xhr,responseText,status) {
//Code here
}
});
});
e nel controller ho cercato di riceverlo come di seguito:
public JsonResult ContactPost(ContactUsDataModel model)
{
var name=model.ContactName; //null
/*Fetch the data and save it and return Json*/
//model is always null
}
Per qualche motivo il modello di cui sopra è sempre null
. Ma questo funziona se mi riferisco al model
come HomeViewModel model
invece di ContactUsDataModel model
nel parametro di controllo come di seguito:
public JsonResult ContactPost(HomeViewModel model)
{
var name=model.CUDModel.ContactName; //gets value
/*Fetch the data and save it and return Json*/
//Model is filled.
}
La mia domanda è, anche se riempio
model
di tipoContactUsDataModel
nella vista sto ottenendo comenull
se riferimento direttamente, maContactUsModel
che è all'interno diHomeViewModel
ottiene pieno. Qui non è importante il tipo di modello. La gerarchia è la sua riferita è necessaria durante il recupero nel controller?
sguardo attributi di nomi di ingressi nell'origine vista del browser - che punta voi fuori – Igor
@ haim770 Mi rifugio' t provato .. Provalo una volta .. –
Beh, il nome dell'attributo sarà un po 'di 'CUDModel.ContactName' @Igor .. Questo ha senso dato che è recuperato da' homeviewmodel' ma mantiene la stessa struttura quando è postato .. Questo è quello che mi confonde con .. –