Nie jestem pewien, czy dobrze sformułowałem pytanie w temacie, ale postaram się wyjaśnić, co w mojej mocy, na temat mojego pytania.Czy model zachowuje swoją strukturę po odebraniu danych w kontrolerze?
mam poniżej ContactUsModel
która jest częścią HomeViewModel
, lepiej powiedzieć zagnieżdżony model klasy w jednym model
public class ContactUsDataModel
{
public string ContactName { get; set; }
public string ContactEmail { get; set; }
public string ContactMessage { get; set; }
public string ContactPhone { get; set; }
}
i jestem coraz to Model
, o których mowa w HomeViewModel
jak poniżej:
public class HomeViewModel
{
/*My other models goes here*/
public ContactUsDataModel CUDModel { get; set; }
}
Teraz w widoku Index.cshtml
silnie utworzyłem widok formularza, jak poniżej:
@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">
}
zrobić ajax
posta jak poniżej:
$('#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
}
});
});
aw kontrolerze Próbowałem je otrzymać jak poniżej:
public JsonResult ContactPost(ContactUsDataModel model)
{
var name=model.ContactName; //null
/*Fetch the data and save it and return Json*/
//model is always null
}
Z jakiegoś powodu powyższego modelu jest zawsze null
. Ale to działa, jeśli odsyłam model
jak HomeViewModel model
zamiast ContactUsDataModel model
w parametrze kontrolera jak poniżej:
public JsonResult ContactPost(HomeViewModel model)
{
var name=model.CUDModel.ContactName; //gets value
/*Fetch the data and save it and return Json*/
//Model is filled.
}
Moje pytanie jest tu choć wypełnić
model
typuContactUsDataModel
w widoku otrzymuję go jakonull
jeśli odsyłasz bezpośrednio , aleContactUsModel
, które jest w środkuHomeViewModel
, zostanie wypełnione . Nie ma tu mowy o typie modelu. Czy wymagana hierarchia jest wymagana podczas pobierania w kontrolerze?
obejrzenia atrybutów nazwa wejść w źródle widoku przeglądarki - że przewróci cię – Igor
@ haim770 I haven” t próbowałem, że .. Spróbuję raz .. –
Dobrze nazwa tego atrybutu będzie rodzaj 'CUDModel.ContactName' @Igor .. To ma sens, ponieważ jest pobierane z' homeviewmodel', ale robi to zachować taką samą strukturę, gdy jest opublikowali. To jest to, z czym jestem zdezorientowany .. –