Я не уверен, правильно ли сформулировал вопрос в теме, но я постараюсь объяснить все, что у меня есть.Поддерживает ли модель свою структуру, когда данные поступают в контроллер?
У меня есть ниже ContactUsModel
который является частью HomeViewModel
, лучше сказать, вложенной модели класса в одном model
public class ContactUsDataModel
{
public string ContactName { get; set; }
public string ContactEmail { get; set; }
public string ContactMessage { get; set; }
public string ContactPhone { get; set; }
}
и я получаю это Model
упоминается в HomeViewModel
, как показано ниже:
public class HomeViewModel
{
/*My other models goes here*/
public ContactUsDataModel CUDModel { get; set; }
}
Теперь в Index.cshtml
view Я сильно создаю вид формы, как показано ниже:
@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">
}
я ajax
сообщение, как показано ниже:
$('#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
}
});
});
и в контроллере я пытался получить его, как показано ниже:
public JsonResult ContactPost(ContactUsDataModel model)
{
var name=model.ContactName; //null
/*Fetch the data and save it and return Json*/
//model is always null
}
почему-то выше модель всегда null
. Но это работает, если я отсылаю model
, как HomeViewModel model
вместо ContactUsDataModel model
в параметре контроллера, как показано ниже:
public JsonResult ContactPost(HomeViewModel model)
{
var name=model.CUDModel.ContactName; //gets value
/*Fetch the data and save it and return Json*/
//Model is filled.
}
Мой вопрос здесь, даже если я заполняю
model
типаContactUsDataModel
в представлении я получаю какnull
если я обращаюсь к напрямую, ноContactUsModel
, который находится внутриHomeViewModel
получает заполнен. Здесь не тип модели. Требуется ли иерархия, указанная в ней , при сборке в контроллере?
посмотреть на имя атрибутов входов в источнике Просм.об - что перевесит тебя – Igor
@ haim770 I гавань» t попытался это .. Попробует это один раз .. –
Ну имя атрибута будет своеобразным 'CUDModel.ContactName' @Igor .. Это имеет смысл, поскольку он извлекается из' homeviewmodel', но поддерживает ли он ту же структуру, когда это опубликовано .. Это то, что меня путают с ... –